Matlab:当图形大小改变时,轴自身调整大小

时间:2014-03-02 21:34:31

标签: matlab plot axis-labels

我有一个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

1 个答案:

答案 0 :(得分:0)

通过设置XTickLabel属性,您还可以将XTickLabelMode更改为manual,因此如果刻度线发生变化,Matlab将不会重新计算标签,如果找到,则只会循环显示指定的标签它需要更多(正如你所观察到的)。

要防止刻度线本身也发生变化,请为XTick指定一些值,或者直接将XTickMode设置为manual - 这样可以停止重新计算刻度位置,因此他们应该留在正确的地方并与标签同步。