How to make a Heatmap Calendar plot
10 次查看(过去 30 天)
显示 更早的评论
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:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/194668/image.png)
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 个评论
jonas
2018-8-28
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.
采纳的回答
jonas
2018-8-28
编辑:jonas
2018-8-29
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))
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/194450/image.png)
16 个评论
MattyK
2024-10-21
Thanks very much for this wonderful code. Can you kindly suggest how do I fix it to plot the figure correctly. Kindly see attached whats its doing
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1796495/image.png)
DGM
2024-10-21
What is the version/OS? Are there any changes you made to the code?
On one hand, I would suspect that it's a graphics driver issue. On the other hand, that doesn't explain why there are so many repeated dates at a very specifically wrong y-position.
I can't replicate that behavior in any version I can access.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Purple 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!