2011-01-21 98 views
2

旋轉XTICK標籤我一直在繪製熱圖與Matlab中的標籤,主要使用功能於imagesc繪製熱圖和xticklabel_rotate旋轉XTICK標籤。 (please see here for xticklabel_rotate)。 它通常運作良好。但是,今天我遇到了一些問題,這似乎是由xticklabel_rotate引起的(或者由xticklabel_rotate使用?Matlab的文本 handle),從代碼生成問題或錯誤而繪製熱圖,並在Matlab

爲了說明這個問題,在我打印我的代碼如下,結果(基本上,它做什麼是隨機生成一個正態分佈的數據矩陣,得出用於使用於imagesc所述數據的熱圖,畫出對頂部和軸的右邊其標籤,然後旋轉xticklabels):

function debug_xticklabelRotate(numX, numY, axisFontsize) 
    data = randn(numY, numX); 
    imagesc(data); 
    colormap(jet); 
    box on 
    set(gca, 'ticklength', [0,0]); 
    set(gca, 'xminortick', 'off', 'yminortick', 'off'); 
    set(gca, 'XAxisLocation', 'top'); 
    set(gca, 'YAxisLocation', 'right'); 
    set(gca,'FontSize', axisFontsize); 
    axis image 
    set(gca, 'Xtick', 1 : numX); 
    htext = xticklabel_rotate([],90, [], 'fontsize', axisFontsize); 
    set(gca, 'YTick', 1 : numY); 
end 

問題1:我用參數

debug_xticklabelRotate(40, 100, .5);  

輸出圖像如下所示(這裏節省空間,我切的形象和只顯示前幾行):

http://i52.tinypic.com/smazoj.jpg

請注意,錯誤的是,作爲調用xticklabel_rotate的結果,既不繪製圖框的右側也不繪製yticklabels。

問題2:當我調用與參數上面的函數作爲

debug_xticklabelRotate(40, 200, .5); % only numY is changed from 100 to 200 

輸出圖像如下所示(在這裏再次,以節省空間,我切圖像和僅示出了頂部幾行) :

http://i55.tinypic.com/317grdd.png

與用numY = 100該呼叫,在該圖中兩個數據的圖像和標籤顯示。但是,請注意這裏有兩個問題。首先,xticklabel的fontsize與yticklabel(axisFontsize)的不一樣。其次,xtick標籤是未對齊以及列(xticks):有些標籤更接近,有些更遠。

請注意,如果我刪除函數debug_xticklabelRotate中的xticklable_rotate的函數調用,所有這些提到的問題都消失了(除了現在xticklabel不旋轉)。

我希望我的問題在上面清楚地說明。任何有關解決問題的建議將受到高度讚賞。非常感謝你。

回答

0

如果您註釋掉該行:

set(gca, 'YAxisLocation', 'right') 

那麼它應該工作正常。看來XTICKLABEL_ROTATE函數不支持正確的y標籤。你應該聯繫原作者,並讓他知道可能的錯誤...

+0

Hi Amro:問題2中描述的兩個問題(字體大小和對齊)都存在於左y標籤和右y標籤。在debug_xticklabelrotate(40,100,.5)中使用左邊的y標籤確實會生成一個熱圖,其中顯示了數據,框和標籤,但在第二個圖像中仍然出現問題2中描述的字體大小和對齊問題。 xticklabel_rotate一直是一個非常受歡迎的功能,但除了我在這裏提到的之外還有其他一些問題。不知道是否有替代方案,或者爲什麼Matlab不提供內置的旋轉支持。 – Causality 2011-01-22 02:53:19

1

作爲xticklabel_rotate的作者,我試圖重現所提到的錯誤只有很小的成功。當y標籤在右邊時,我發現一個軸位置被改變的問題,我會研究它。當我運行相同的例子時,我沒有看到如此顯着的錯誤,所以我不知道如何迴應。請確認在打印圖形時存在這些問題,這不是一個簡單的顯示問題。

文本框是在數據單元中的勾號位置創建的。他們是中間對齊的,沒有更多可以完成的事情,但我願意接受建議。

PS。我同意如果這個函數是MatLab中固有的,那將會很好。如果是這樣,我就不必爲此工作。