环境:Windows 7 64位,Matlab 2014a
目标:
问题:排列X和Y标记位置和值。当x和y轴上的向量的最后一个(" end")值相同时,我使用的代码正确地给出了滴答和值。但是,当结束值不同时,它不会,并产生一些非常奇怪的东西。
下面我已经包含了我修改过的代码,以便您可以运行它而无需添加任何内容。当然,在我的情况下,误差向量是误差值,而不是随机数。要看到"最终价值的问题"使用第二个b向量。
fontsize = 20
k = [2^-5, 2^-3, 2^-1, 2^0, 2^1, 2^3, 2^5, 2^7, 2^9, 2^11, 2^13, 2^15]
b = [2^-5, 2^-3, 2^-1, 2^0, 2^1, 2^3, 2^5, 2^7, 2^8, 2^9, 2^10, 2^11, 2^13, 2^15]
% b = [2^-5, 2^-3, 2^-1, 2^0, 2^1, 2^3, 2^5, 2^7, 2^8, 2^9, 2^10, 2^11, 2^13, 2^19]
errorVector = randi(20, 1, length(b)*length(k))'
figure
% Create a matrix from error vector (size of error vector is [length(k)*length(b),1])
B = reshape(errorVector, [length(b), length(k)])
B = flipud(B)
% imagesc(x,y,C)
imagesc(b, k, B)
title('Heatmap Parameters Percent Error', 'FontSize', fontsize);
% Set colorbar limits
caxis([0 15])
colorbar;
ax1 = gca;
xTickLabel = (k)'
xTick = linspace(k(1), k(end), numel(xTickLabel))';
set(ax1, 'XTick', xTick, 'XTickLabel', xTickLabel)
xlabel('k parameter', 'FontSize', fontsize)
yTickLabel = (b)'
yTick = linspace(b(1), b(end), numel(yTickLabel))';
set(ax1, 'YTick', yTick, 'YTickLabel', flipud(yTickLabel(:)))
ylabel('b parameter', 'FontSize', fontsize)
set(ax1,'FontSize', fontsize)
这里,改变b或k向量的任何结束值,程序将输出X和Y标记完全错误的图形。
另外,我想绘制网格线。当我使用" grid on"它会在刻度线上绘制网格线,这在热图的情况下是不正确的。因为刻度线将位于列的中心 - 或行 - 但网格线应位于列之间的边界 - 或行。
顺便说一句,如果你知道在Matlab中绘制热图的更好方法,请告诉你。
请帮我解决这个问题。任何帮助表示赞赏,
伊利亚斯
答案 0 :(得分:2)
首先 - 您不需要flipud
B
矩阵 - 默认情况下imagesc
绘制反转的y数据,但您可以使用以下方法修复此问题语句:
set(gca,'ydir','normal');
这也意味着你不必乱搞嘀嗒标签。您可以通过执行以下操作来获得正确的标签:
% replace the imagesc call with:
imagesc(B);
set(gca,'ydir','normal');
% formatting stuff
...
% replace the set commands with:
set(ax1, 'XTick', 1:length(k), 'XTickLabel', k)
set(ax1, 'YTick', 1:length(b), 'YTickLabel', b)
默认情况下,如果您不向imagesc
命令提供x和y数据,它将对它们进行线性编号(1,2,3 ...)。基本上我们在这里做的是确保它为b
和k
的每个元素都有刻度,然后将标签设置为相应向量的值。
不幸的是,我不确定是否有办法让网格间距与imagesc
对齐。您可以尝试使用pcolor
代替它,它有自己的一组问题,但允许您在元素之间获取网格线(排序)。它还允许您使用插值着色模式,这将使您的绘图看起来更像典型的热图。
要改为使用pcolor
,您只需要替换imagesc
:
% imagesc(B);
% set(gca,'ydir','normal');
pcolor(B);
% this uses a smoother shading method, for a more 'heatmap' like output
% shading interp
我相信,其他一切都应该按预期运作。