大家好,欢迎来到IT知识分享网。
MATLAB绘制热图(Heatmap)
热图(Heatmap)
热图的主要作用是直观展示重点研究对象的差异情况,多用于经济学与工学差异性分析之中。
heatmap函数创建热图
语法
h=heatmap(tbl,xvar,yvar) h=heatmap(tbl,xvar,yvar,'ColorVariable',cvar) h=heatmap(cdata) h=heatmap(xvalues,yvalues,cdata) h=heatmap(___,Name,Value) h=heatmap(parent,___) 说明 h = heatmap(tbl,xvar,yvar) 基于表 tbl 创建一个热图,并返回 HeatmapChart 对象。xvar 输入参数指示沿 x 轴显示的表变量。yvar 输入参数指示沿 y 轴显示的表变量。默认颜色基于计数聚合,这种方法计算每对 x 和 y 值一起出现在表中的总次数。可使用 h 在创建热图之后对其进行修改。 h=heatmap(tbl,xvar,yvar,'ColorVariable',cvar) 使用 cvar 指定的表变量来计算颜色数据。默认的计算方法为均值聚合。 h=heatmap(cdata) 基于矩阵 cdata 创建一个热图。热图上的每个单元格对应 cdata 中的一个值。 h=heatmap(xvalues,yvalues,cdata) 指定沿 x 轴和 y 轴显示的值的标签。 h=heatmap(___,Name,Value) 使用一个或多个名称-值对组参数指定热图的其他选项。请在所有其他输入参数之后指定这些选项。 h = heatmap(parent,___) 在由 parent 指定的图窗、面板或选项卡上创建热图。
heatmap属性
MATLAB-中文帮助
案例
案例1:基本绘制
此案例利用Matlab自带的‘heatmap’命令绘制热图。虽然好看,但有一个问题:其标题、坐标轴标题、字体字号等属性无法分开单独设置。
成图如下:
MATLAB代码如下:
clc close all clear %% 基础设置 pathFigure= '.\Figures\' ; figureUnits = 'centimeters'; figureWidth = 30; figureHeight = 20; %% 绘制热图 figure(1) set(gcf, 'Units', figureUnits, 'Position', [0 0 figureWidth figureHeight]); % 绘制热图:河东地区各站点干旱年内分布图 XName = ["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"]; YName = ["景泰", "皋兰","靖远","榆中","临夏","临洮","华家岭","环县","平凉","西峰镇","玛曲","合作","岷县","武都","天水北道区"]; h = heatmap( XName , YName , SPI1Station ,'FontSize',10); % h.CellLabelColor = 'none'; % 设为 'none' 表明去掉标注值 h.GridVisible = 'off'; % 设置坐标区名字与图的大标题 % h.Title = 'Tiltle'; h.XLabel = '月份'; h.YLabel = '站点'; % 对热图上色—colormap函数 hc = colormap(gca, flipud(hot) ); set(gca,'FontSize',16); % ,'Fontname', 'Times New Roman' str= strcat(pathFigure, "Fig.2", '.tiff'); print(gcf, '-dtiff', '-r600', str);
案例2:修改热图的属性
热图的图形包括了x轴名称、y轴名称、x和y的数据、颜色、数据标注、图例等属性,可以通过修改热图函数的返回值的句柄设置其属性。
成图如下:(中文字体为宋体;西文字体为Times New Roman)
MATLAB代码如下:
clc close all clear %% 基础设置 pathFigure= '.\Figures\' ; figureUnits = 'centimeters'; figureWidth = 30; figureHeight = 20; figure(2) set(gcf, 'Units', figureUnits, 'Position', [0 0 figureWidth figureHeight]); % 绘制热图:河东地区各站点干旱年内分布图 XName = ["1\fontname{宋体}月","2\fontname{宋体}月","3\fontname{宋体}月","4\fontname{宋体}月","5\fontname{宋体}月","6\fontname{宋体}月",... "7\fontname{宋体}月","8\fontname{宋体}月","9\fontname{宋体}月","10\fontname{宋体}月","11\fontname{宋体}月","12\fontname{宋体}月"]; YName = ["\fontname{宋体}景泰", "\fontname{宋体}皋兰","\fontname{宋体}靖远","\fontname{宋体}榆中","\fontname{宋体}临夏","\fontname{宋体}临洮",... "\fontname{宋体}华家岭","\fontname{宋体}环县","\fontname{宋体}平凉","\fontname{宋体}西峰镇","\fontname{宋体}玛曲","\fontname{宋体}合作","\fontname{宋体}岷县","\fontname{宋体}武都","\fontname{宋体}天水北道区"]; h = heatmap( XName , YName , SPI1Station ,'FontSize',10); h.GridVisible = 'off'; h.FontName='Times New Roman'; % 设置显示的字体 h.FontSize = 14; % 设置显示的字体大小 % 设置坐标区名字与图的大标题 % h.Title = 'Tiltle'; h.XLabel = '\fontname{
宋体}月份'; h.YLabel = '\fontname{
宋体}站点'; % 对热图上色—colormap函数 hc = colormap(gca, flipud(hot) ); set(gca,'FontSize',16); % ,'Fontname', 'Times New Roman' str= strcat(pathFigure, "Fig.2", '.tiff'); print(gcf, '-dtiff', '-r600', str);
案例3:设置部分标签
在数据量较大时,希望只有部分数据备注大小,此时应当如何实现呢?
但标签文字方向貌似不能修改,这还是有点烦人啊
设置代码如下:
figureUnits = 'centimeters'; figureWidth = 20; figureHeight = 12; % 图形1:绘制热图 figure(2) set(gcf, 'Units', figureUnits, 'Position', [0 0 figureWidth figureHeight]); h = heatmap( rho ,'FontSize',10); % XName, YName, h.GridVisible = 'off'; h.XDisplayLabels = {
'','','','4','','','','8','','','','12','','','','16','','','','20','','','','24'}; h.YDisplayLabels = {
' ','2\fontname{宋体}月',' ','4\fontname{宋体}月',' ','6\fontname{宋体}月',' ','8\fontname{宋体}月',' ','10\fontname{宋体}月',' ','12\fontname{宋体}月'}; h.FontName='Times New Roman'; % 设置显示的字体 h.FontSize = 14; % 设置显示的字体大小 % 设置坐标区名字与图的大标题 % h.Title = 'Tiltle'; h.XLabel = '\fontname{宋体}时间尺度\fontname{Times New Roman}\itSPI'; h.YLabel = '\fontname{宋体}月份'; % 对热图上色—colormap函数 hc = colormap(gca, flipud(hot) ); set(gca,'FontSize',16); % ,'Fontname', 'Times New Roman'
案例4:部分数值设置特殊标注(如黑点、白框等)
如果想像下面这幅图(出自参考论文1)一样,部分设置标注,该如何实现呢?
成果图如下所示:
MATLAB相关代码如下:
figureUnits = 'centimeters'; figureWidth = 20; figureHeight = 12; % 图形2:绘制热图 figure1 = figure(2); set(gcf, 'Units', figureUnits, 'Position', [0 0 figureWidth figureHeight]); h = heatmap( rho ,'FontSize',10); % XName, YName, h.GridVisible = 'off'; h.XDisplayLabels = {'','','','4','','','','8','','','','12','','','','16','','','','20','','','','24'}; h.YDisplayLabels = {' ','2\fontname{宋体}月',' ','4\fontname{宋体}月',' ','6\fontname{宋体}月',' ','8\fontname{宋体}月',' ','10\fontname{宋体}月',' ','12\fontname{宋体}月'}; h.FontName='Times New Roman'; % 设置显示的字体 h.FontSize = 14; % 设置显示的字体大小 % 设置坐标区名字与图的大标题 % h.Title = 'Tiltle'; h.XLabel = '\fontname{宋体}时间尺度\fontname{Times New Roman}\itSPI'; h.YLabel = '\fontname{宋体}月份'; % 对热图上色—colormap函数 hc = colormap(gca, flipud(hot) ); set(gca,'FontSize',16); % ,'Fontname', 'Times New Roman' % t = text( root,'string',"(a) \fontname{宋体}洮河流域", 'Units','normalized','position',[0.02,1.05], 'FontSize',14,'FontWeight','Bold','FontName','Times New Roman'); for iMonth=1:12 FigurePosition = get(gca, 'InnerPosition'); InnerPosition = [0.13, 0.4737,0.1958,0.5263]; xStart = FigurePosition(1,1)+FigurePosition(1,3)*index(iMonth)/24-0.024; yStart = FigurePosition(1,2)+FigurePosition(1,4)*(1- iMonth/12)+0.0195; % 创建 rectangle annotation(figure1,'rectangle',... [xStart, yStart, 0.016, 0.03],... 'Color',[1 1 1],... 'FaceColor',[1 1 1],'FaceAlpha',.9); end
案例5:添加显著水平/*等
若想得到以下图形(出自参考论文1),该如何实现呢?
参考
1、参考论文-J2016-From meteorological to hydrological drought using standardised indicators
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/143069.html