2014-03-02 115 views
0

我有一個Matlab imagesc圖形,當數字窗口大小發生變化時,無法正確重新縮放其x軸。當圖形生成時,座標軸是正確的,但是當x軸增加時,滴答的數量會增加,並且x標籤會循環並重復。這是不受歡迎的行爲。Matlab:當圖形大小發生變化時,軸自動調整大小

我會發布圖片,但顯然我沒有足夠的信譽。您必須改寫我的書面說明。基本上我的數字的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屬性,也改變了XTickLabelModemanual,從而Matlab的將不重新計算的標籤,如果蜱變化,只是循環通過指定的標籤,如果它發現它需要更多的(如你觀察到的)。

爲了防止蜱蟲本身從變化中,無論是對XTick指定某些值或只設置XTickModemanual直接 - 這將阻止被重新計算刻度的位置,所以他們應該留在正確的地方,並同步於標籤。

+0

我試過添加set(gca,'XTickMode','manual'),但是將xaxis標籤重置爲0:400。 set(gca,'XTick',[ - 100 0 100 200 300 400])或其等價物做同樣的事情。難道我做錯了什麼? –

+0

啊,明白了。出於某種原因,使用linspace而不是手動創建的矢量來設置'XTick'屬性。謝謝您的幫助。 –

相關問題