Filter löschen
Filter löschen

How to make a Heatmap Calendar plot

15 Ansichten (letzte 30 Tage)
Emanuel Valdes
Emanuel Valdes am 28 Aug. 2018
Bearbeitet: CdC am 26 Apr. 2021
I'm trying to make a Heatmap Calendar for MP2.5 like the one made for R's "Open Air Project", using date and concentration (data attached)
It should look like this:
I know there's a calendar function, but I have no idea of how to plot it. I would really appreciate any help you could give me. Thanks a lot!
  1 Kommentar
jonas
jonas am 28 Aug. 2018
Should be possible but probably requires a lot of code unless you can find something on FEX. you may be able to overlay a heatmap on the calender function.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

jonas
jonas am 28 Aug. 2018
Bearbeitet: jonas am 29 Aug. 2018
I made something similar to what you were asking for. It's just something I put together for fun, so there are definitely some shortcomings and lots of shortcuts. However, if you don't find anything better on FEX, then you can develop this further. You have to play around with the figure size, markersize and fontsize to make it look good. If you change one you have to adjust the others.
% Load data
data=load('cal.mat')
Date=data.Date;
MP25=data.MP25;
MP25(isnan(MP25))=-100;
% Group data
x=weekday(Date);
y=week(Date);
[G,m]=findgroups(month(Date));
% Figure starts here!
figure;hold on
for ii=1:12
% Extract subgroup of monthly data and name of month
xm=x(G==ii);
ym=y(G==ii);
zm=MP25(G==ii);
Mname = unique(month(Date(G==ii),'name'));
% Initiate subplot ii
ax(ii) = subplot(3,4,ii);hold on
% Write out day of month on grid
str=cellstr(num2str(day(Date(G==ii),'dayofmonth')));
text(xm,ym,ones(size(xm)).*100,str,'fontsize',6,...
'fontweight','bold',...
'verticalalignment','middle',...
'horizontalalignment','center')
zm(zm<0)=NaN;
% Plot color scale
H(ii) = scatter3(xm,ym,zm,150,zm,...
's','filled','markeredgecolor','none');
% Fix some properties that are annoying to change after plotting
title(Mname)
set(gca,'ylim',[min(ym)-.5 min(ym)+5.5],...
'ytick',[min(ym)-.5:max(ym)+.5])
grid on
end
% Add colorbar
colorbar('west','position',[0.93 0.30 0.03 0.4])
% Set up properties for all axes
set(ax,'clim',[0 90],...
'xcolor','k',...
'ycolor','k',...
'xtick',1.5:8,...
'box','on',...
'xticklabels',{'S ','M ','T ','W ','T ','F ','S '},...
'yticklabels',{},...
'ticklength',[0 0],...
'ydir','reverse',...
'xlim',[0.5 7.5],...
'view',[0 90],...
'layer','top');
% Adjust figure size to fit with the font/markersize
set(gcf,'color',[1 1 1],...
'position',[955 140 640 428])
colormap(flipud(autumn))
  14 Kommentare
jonas
jonas am 31 Aug. 2018
No problemo. What do you mean month name local?
This is where the month name is extracted and stored in a cell array:
Mname = unique(month(Date(G==ii),'name'));
you can change the 'name' to 'shortname' ( Jan,Feb ... ) or 'monthofyear' ( 1,2,...), but that's it. You can of course also remove this line and specify any strings manually:
Mname={'Janu','Febr'...,'Dece');
CdC
CdC am 26 Apr. 2021
Bearbeitet: CdC am 26 Apr. 2021
Note: the cal.mat file requested in the code is based on the datafile in the original question. Thanks for creating this lovely and helpful code.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Colormaps finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by