How can i produce a plot that represents each month of the year showing the total of the different values?

조회 수: 9 (최근 30일)
I have a dataset with different days,months and years that all produce the total of the different individual values. If i was to represent the total value for each month in that year.
cyclist_M = zeros(12,1);
for i=1:1:12
start_P=i+(i-1)*3; %start pt of the month
end_P=start_P+3;
cyclist_M(i,1)=sum(cyclistVec_year_2017(start_P:end_P,1));
end
%Now to visualize the data
month =(1:11)';
figure(1);bar(month,cyclist_M);title('Total cyclist per month in 2017');xlabel('Month');ylabel('Total Cyclist');grid on;
  댓글 수: 4
Jan
Jan 2022년 11월 25일
@Kernisha: Please post some code, which create example data. Then suggesting a solution is much easier.
Kernisha
Kernisha 2022년 11월 25일
편집: Jan 2022년 11월 26일
%Obtain data
date = EcoTotemBroadwayBicycleCountA2(:,1);
dateNum = datevec(date);
date_2017 = (dateNum(:,1)==2017);
year_2017 = date_2017
year_2017 = year_2017>0;
runT = EcoTotemBroadwayBicycleCountA2(:,5);
runTnum = cell2mat(runT);
runVec_year_2017=runTnum(year_2017);

댓글을 달려면 로그인하십시오.

답변 (2개)

Seth Furman
Seth Furman 2024년 10월 15일
Adding to Arjun's answer, you can use groupsummary to accomplish this task even more succinctly.
dates = datetime(2017,1,1) + caldays(0:364);
dailyCounts = randi([0, 100], size(dates));
EcoTotemBroadwayBicycleCountA2 = table(dates', dailyCounts', VariableNames=["Date", "BicycleCount"]);
EcoTotemBroadwayBicycleCountA22017 = EcoTotemBroadwayBicycleCountA2(year(EcoTotemBroadwayBicycleCountA2.Date) == 2017,:);
G = groupsummary(EcoTotemBroadwayBicycleCountA22017,"Date","month","sum")
G = 12x3 table
month_Date GroupCount sum_BicycleCount __________ __________ ________________ Jan-2017 31 1525 Feb-2017 28 1609 Mar-2017 31 1550 Apr-2017 30 1300 May-2017 31 1369 Jun-2017 30 1454 Jul-2017 31 1942 Aug-2017 31 1678 Sep-2017 30 1605 Oct-2017 31 1691 Nov-2017 30 1663 Dec-2017 31 1564
bar(G.month_Date, G.sum_BicycleCount)
title("Total cyclist per month in 2017");
xlabel("Month");
ylabel("Total Cyclist");
grid on;

Arjun
Arjun 2024년 10월 8일
As I understand it, you want to plot the months of the year 2017 against the number of cyclists in those months, given the daily data.
To do so, the code should efficiently filter the data to include only entries from the year 2017. To calculate monthly totals, the program iterates over each month, using a logical mask to identify and sum the counts for that month. This results in an array of monthly totals. Finally, a bar plot is generated to visually represent the total counts for each month, with the x-axis labelled with month names and the y-axis displaying the total counts.
Kindly refer to the code below for better understanding:
% Create sample data and put in a table
dates = datetime(2017,1,1) + caldays(0:364);
dailyCounts = randi([0, 100], size(dates));
EcoTotemBroadwayBicycleCountA2 = table(dates', dailyCounts', 'VariableNames', {'Date', 'BicycleCount'});
% Extract the year from the dates and filter for 2017
dateNum = datevec(EcoTotemBroadwayBicycleCountA2.Date);
isYear2017 = (dateNum(:,1) == 2017);
dates_2017 = EcoTotemBroadwayBicycleCountA2.Date(isYear2017);
counts_2017 = EcoTotemBroadwayBicycleCountA2.BicycleCount(isYear2017);
% Initialize an array to store monthly totals
monthlyTotals = zeros(12, 1);
% Loop through each month and sum the daily counts
for monthIdx = 1:12
% Find the indices for the current month
monthMask = month(dates_2017) == monthIdx;
monthlyTotals(monthIdx) = sum(counts_2017(monthMask));
end
% Plotting the results
figure;
bar(1:12, monthlyTotals);
title('Total Bicycle Counts per Month in 2017');
xlabel('Month');
ylabel('Total Bicycle Count');
xticks(1:12);
xticklabels({'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'});
grid on;
I hope this will help!

카테고리

Help CenterFile Exchange에서 Calendar에 대해 자세히 알아보기

제품


릴리스

R2016a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by