Matlab进阶绘图-方块热图灵活版

文摘   2024-07-20 11:54   四川  

利用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


欢迎加入第八星系


01

公众号后台发送:方块热图,即可获取本文所用数据

02

公众号后台发送:群聊二维码,即可扫码加入第八星系交流群

03

群聊中也会更新每日推文中所用到的数据哦

本文编辑:周游

第八星系人造大气理论爱好者
记录与交流python、matlab等科研工具。记录与交流大气科学的学科知识
 最新文章