我有一个40x40矩阵作为我的数据集,我想将字符串变量作为行和列标签分配给使用MATLAB生成的热图。 我无法正确解释帮助页面语法。有人能帮助我吗?
答案 0 :(得分:5)
原则始终相同。首先是一个更通用的示例,尤其是HeatMap
函数。
我认为您的x
和y
数据不是实际的索引向量。
% 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)
我个人会跳过每一个值,你也可以移动标签,因此它们位于每个彩色列/行下面,而不是位于网格之间/上。
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))
对于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)
或更多字符串:
labelString = 'helloworldhelloworldhelloworldhelloworld';
labels = strsplit(sprintf('%c ',labelString),' ');
labels = labels(1:end-1);
HeatMap(heat,'RowLabels', fliplr(labels), 'ColumnLabels', labels)