我有一个Matlab imagesc图,当图形窗口大小改变时,它无法正确地重新缩放其x轴。生成图形时,轴是正确的,但是当x轴增加时,刻度数增加,x标签循环返回并重复。这是不受欢迎的行为。
我会发布图片,但显然我不够信誉。你将不得不处理我的书面描述。基本上我的数字的x轴标签从-100到400有6个刻度,即[-100 0 100 200 300 400]。当我将窗口拉得更宽时,它从-100到400再循环回到-100并再次回到300,有11个刻度,即[-100 0 100 200 300 400 -100 0 100 200 300]。数据正确调整大小,但x轴刻度标记没有。
我正在使用以下代码生成图:
heatmap = figure(2),subplot(1,15,2:15)
imagesc(stretched_psth_avg, [minValue maxValue]);
xlim([0, range([plottingVars.xLims(1) plottingVars.xLims(2)])])
set(gca,'XTickLabel',round([linspace(plottingVars.xLims(1),...
plottingVars.xLims(2),(plottingVars.numBins/20)+1)]))
xlabel('ms')
hold on
cBarHandle = colorbar;
set(gca, 'YTick', [],'YTickLabel', []);
set(gca, 'YTick', 1, 'Color', [0 0 0]);
% Plot colors as image Y axis
newColorBar = getColorBar;
subplot(1,15,1)
imagesc(newColorBar)
set(gca, 'YTick', [],'YTickLabel', []);
set(gca, 'XTick', [],'XTickLabel', []);
ylabel('condition')
hold off
这些图像的尺寸通常为133x101。使用'plot'命令生成的数据也会发生同样的事情。
修改的 工作代码如下。我用等效或随机数替换了实际变量,但它显示了相同的行为。
heatmap = figure(2),subplot(1,15,2:15)
newdata = rand(133,100);
for i = 1:size(newdata,2)
for x = i*5-4:(i*5)
stretched_psth_avg(:,x) = newdata(:,i);
end
end
imagesc(stretched_psth_avg, [min(min(newdata)) max(max(newdata))]);
xlim([0, range([-100 400])])
set(gca,'XLimMode','Manual')
set(gca,'XTickLabel',round([linspace(-100,400,(100/20)+1)]))
uicontrol('Style', 'text',...
'String', sprintf('Least number of trials = %d',min([conditions.numTrials])),...
'Units','normalized',...
'Position', [0.85 0.9 0.1 0.1]);
xlabel('ms')
hold on
cBarHandle = colorbar;
set(gca, 'YTick', [],'YTickLabel', []);
set(gca, 'YTick', 1, 'Color', [0 0 0]);
% Plot colors as image Y axis
subplot(1,15,1)
newcolorbar = rand(133,1);
imagesc(newcolorbar)
set(gca, 'YTick', [],'YTickLabel', []);
set(gca, 'XTick', [],'XTickLabel', []);
ylabel('condition')
hold off
答案 0 :(得分:0)
通过设置XTickLabel
属性,您还可以将XTickLabelMode
更改为manual
,因此如果刻度线发生变化,Matlab将不会重新计算标签,如果找到,则只会循环显示指定的标签它需要更多(正如你所观察到的)。
要防止刻度线本身也发生变化,请为XTick
指定一些值,或者直接将XTickMode
设置为manual
- 这样可以停止重新计算刻度位置,因此他们应该留在正确的地方并与标签同步。