利用MATLAB绘制方块热图
作者:阿昆的科研日常、第八星系-李智
邮箱:lizhi258147369@163.com
代码放置
本次利用MATLAB绘制方块热图需要用到两个脚本,下文第一个代码块需要自己手动操作,第二个代码块为自定义函数,两个脚本如上图放置在文件夹中。
方块热图绘制
%% 年评价
% 数据准备
% 读取数据
data = xlsread('cities_O3.xlsx','年评价','B2:AP9');
% 数据矩阵
Z = round(data);
% 颜色定义
% TheColor函数获取方式:
% 公众号_阿昆的科研日常_后台回复:TC
%C = TheColor('sci',2064,'map',20,'seka',1);
%C = flipud(C); %将数组C从上向下翻转 %使用TheColor函数需去掉包含本函数代码前的百分号
% 图片尺寸设置(单位:厘米)
figureUnits = 'centimeters';
figureWidth = 15;
figureHeight = 12;
% 窗口设置
figureHandle = figure;
set(gcf, 'Units', figureUnits, 'Position', [0 0 figureWidth figureHeight]);
figure(1)%
subplot(1,1,1)
% 方块热图灵活版绘制
squareheatmappro(Z,1,500)
hTitle = title('The 90th percentile of MDA8 O3 from 2007 to 2014');
% 细节优化
% 赋色
%colormap(C)
clim([100 240]);
% 小于或等于100的所有值映射到颜色图的第一行
% 大于或等于240的所有值映射到颜色图的最后一行
% 介于100和200之间的所有值映射到颜色图的中间各行
% 坐标区调整
axis equal tight
set(gca, 'Box','off', ... % 边框
'Layer','bottom',... % 图层
'LineWidth',2,... % 线宽
'XGrid', 'off', 'YGrid', 'off', ... % 网格
'TickDir', 'out', 'TickLength', [0 0], ... % 刻度
'XMinorTick', 'off', 'YMinorTick', 'off', ... % 小刻度
'XColor', [.1 .1 .1], 'YColor', [.1 .1 .1],... % 坐标轴颜色
'Xtick',1:41,... % 坐标轴刻度
'Xticklabels',{'NanJing','SuZhou(JiangSu)','NanTong','LianYungang','XuZhou','YangZhou','WuXi','ChangZhou','ZhenZhou','TaiZhou(JiangSu)','HuaiAn','YanCheng','SuQian','HangZhou','NingBo','WenZhou','ShaoXing','HuZhou','JiaXing','TaiZhou(ZheJiang)','ZhouShan','JinHua','QuZhou','LiShui','HeFei','WuHu','MaAnshan','BengBu','HuaiNan','HuaiBei','TongLing','AnQing','HuangHhan','ChuZhou','FuYang','SuZhou(AnHui)','LuAn','BoZhou','ChiZhou','XuanCheng','ShangHai'},...
'Ytick',1:8,...
'Yticklabels',2007:2014)
% 字体和字号
set(gca, 'FontName', 'Helvetica', 'FontSize',7, 'FontWeight', 'bold')
set(hTitle, 'FontSize',8, 'FontWeight', 'bold')
% 背景颜色
set(gcf,'Color',[1 1 1])
%
%
% 给方块加数据标识
x = 1:size(data,2);
y = 1:size(data,1);
hold on
m=max(size(y));
n=max(size(x));
for k=1:m
for i=1:n
c = num2str(Z(k,i));%//数字转字符
text(x(i)-0.2,y(k),c,'Color','#000000',...
'FontSize',7,...
'FontWeight' , 'bold');%//在图上显示文字
end
end
绘制图像
自定义函数
function squareheatmappro(data,minsz,maxsz)
% data - m*n matrix
% minsz - size of the min bubble
% maxsz - size of the max bubble
% 构造方块位置数据
x = 1:size(data,2);
y = 1:size(data,1);
[X,Y] = meshgrid(x,y);
Z = data;
% 构造网格数据
w = x(2)-x(1);
Xt = (x(1)-w/2):w:(x(end)+w/2);
Yt = (y(1)-y/2):w:(y(end)+y/2);
[Xmesh,Ymesh] = meshgrid(Xt,Yt);
Zmesh = zeros(size(Xmesh));
% 构造方块尺寸数据
minz = min(Z(:));
maxz = max(Z(:));
S = minsz+(Z(:)-minz)./(maxz-minz).*(maxsz-minsz);
% 绘制方块热图
mesh(Xmesh,Ymesh,Zmesh,'EdgeColor','k','LineWidth',1)
hold on
scatter(X(:),Y(:),S,Z(:),'s','filled')
view(0,90)
end
欢迎加入第八星系
公众号后台发送:方块热图,即可获取本文所用数据
公众号后台发送:群聊二维码,即可扫码加入第八星系交流群
群聊中也会更新每日推文中所用到的数据哦
本文编辑:周游