字符串作为HeatMap标签

时间:2013-12-09 18:39:00

标签: matlab plot matlab-figure heatmap

我有一个40x40矩阵作为我的数据集,我想将字符串变量作为行和列标签分配给使用MATLAB生成的热图。 我无法正确解释帮助页面语法。有人能帮助我吗?

1 个答案:

答案 0 :(得分:5)

原则始终相同。首先是一个更通用的示例,尤其是HeatMap函数。


我认为您的xy数据不是实际的索引向量。

% example data
x = linspace(-20,40,40);
y = linspace(20,100,40);
[X,Y] = meshgrid(x,y);
heat = X.*Y;

% the plot
figure(1)
surf(X,Y,heat)
view(0,90)
colormap(hot)
colorbar

% the ticks
xticks = 1:numel(x);
yticks = 1:numel(y);

set(gca,'XTick',x,'XTickLabels',xticks)
set(gca,'YTick',y,'YTickLabels',xticks)

enter image description here

我个人会跳过每一个值,你也可以移动标签,因此它们位于每个彩色列/行下面,而不是位于网格之间/上。

set(gca,'XTick',x(1:2:end)+(x(2)-x(1))/2,'XTickLabels',xticks(1:2:end))
set(gca,'YTick',y(1:2:end)+(x(2)-x(1))/2,'YTickLabels',xticks(1:2:end))

enter image description here


对于HeatMap函数。同样的原则只是你需要一个字符串的单元格数组。例如,我使用数字1 to 40作为字符串。您可以用字符串单元格数替换它。

% same example data as above
xticks = 1:numel(x);
yticks = 1:numel(y);
%xticks as string cell array
xStrings = arrayfun(@num2str, xticks, 'Uniform', false);  
%yticks as string cell array
yStrings = arrayfun(@num2str, yticks, 'Uniform', false);  
HeatMap(heat,'RowLabels', yStrings, 'ColumnLabels', xStrings)

enter image description here


或更多字符串:

labelString = 'helloworldhelloworldhelloworldhelloworld';
labels = strsplit(sprintf('%c ',labelString),' ');
labels = labels(1:end-1);
HeatMap(heat,'RowLabels', fliplr(labels), 'ColumnLabels', labels)

enter image description here