2010-08-27 54 views
13

刻度大於10'000左右的刻度標籤,例如格式化爲1x10^4。而指數部分出現在相應的軸上方。這種不良行爲在on matlab central也有很好的描述,但沒有解決方案。抑制圖中刻度的指數格式

感謝您的幫助。


「快速絕招」

set(gca, 'YTickLabel',get(gca,'YTick')) 

當應用於BAR3,如可在下列圖中可以看到沒有工作。

bar3 plot failing

+0

你鏈接線看,我看到'tick2text'(http://www.mathworks.com/matlabcentral/fileexchange/16003 -tick2text-create-easy-to-customize-tick-labels),這似乎完美地解決了這個問題。 – Jonas 2010-08-27 21:51:53

+0

tick2text格式化刻度標籤,但軸上方的指數部分仍然存在,看起來很奇怪。上面給出的新聞發佈同樣的問題。 – zellus 2010-08-27 22:06:36

+0

圖片(http://www.mathworks.com/matlabcentral/fx_files/16003/4/tick2textexample.png)與'tick2text'配合使用似乎表明了其他情況。這張照片是錯的嗎? – Jonas 2010-08-27 22:13:01

回答

1

一種方式來克服刻度標記更好的控制,並避免了指數格式,就是用TICK2TEXT從文件交換。

下面是一個例子:

y = cool(7); %# define some data 
ah = axes; %# create new axes and remember handle 
bar3(ah,y*1E6,'detached'); %# create a 3D bar plot 
tick2text(ah, 'ztickoffset' ,-1.15,'zformat', '%5.0f', 'axis','z') %# fix the tick labels 
7

編輯

根據這一technical solution page,格式化刻度標記的推薦的方法是這樣的(你可以使用任何格式的功能,如NUM2STR數量,的sprintf,MAT2STR,或任何其他..)

y = cool(7); 
bar(y(:,1)*1e6) 
set(gca, 'YTickMode','manual') 
set(gca, 'YTickLabel',num2str(get(gca,'YTick')')) 

alt text

但是似乎是一個錯誤,當涉及到Z軸(標籤的格式是否正確,但指數乘數仍呈現某種原因!)

y = cool(7); 
bar3(y*1e6, 'detached') 
set(gca, 'ZTickMode','manual') 
set(gca, 'ZTickLabel',num2str(get(gca,'ZTick')')) 

alt text

最後,還有我們替換文本對象的刻度標記的另一個解決方法(見本technical solution page爲參考):

y = cool(7); 
bar3(y*1e6, 'detached') 
offset = 0.25; Xl=get(gca,'XLim'); Yl=get(gca,'YLim'); Zt=get(gca,'ZTick'); 
t = text(Xl(ones(size(Zt))),Yl(ones(size(Zt)))-offset,Zt, num2str(Zt')); %#' 
set(t, 'HorizontalAlignment','right', 'VerticalAlignment','Middle') 
set(gca, 'ZTickLabel','') 

alt text

+0

我很感謝你的解決方案!當我在Google上搜索解決方案時,我確實遇到了您提到的「技術解決方案」,但沒有看到它的相關性。現在該問題已準備好提交給MathWorks支持! – zellus 2010-08-28 21:17:43

2

另一個可以嘗試的技巧是在繪製數據之前對數據進行縮放,然後對刻度標籤進行縮放以使其看起來在不同的刻度上繪製。您可以使用功能LOG10來幫助您根據繪圖值自動計算適當的比例因子。假設你有變量數據xy,你可以試試這個:

scale = 10^floor(log10(max(y))); %# Compute a scaling factor 
plot(x,y./scale);     %# Plot the scaled data 
yTicks = get(gca,'YTick');  %# Get the current tick values 
set(gca,'YTickLabel',num2str(scale.*yTicks(:),'%.2f')); %# Change the labels 
+0

好的解決方案,但我可能更喜歡解決圖形部分而不是數據。 – zellus 2010-08-28 13:13:09

+0

@zellus你應該可以使用'hgtransform'對象來縮放顯示的數據。這是我們最終使用的解決方案。繪圖數據不受干擾,但以1/1000的實際值顯示。 – KitsuneYMG 2012-09-25 16:47:21

+0

太棒了。如何轉換軸上的值是非常不平凡的。 – 2013-03-13 01:24:35