2017-07-30 78 views
1

我想顯示一個三維繪圖功能在Matlab中衝浪,我需要它在對數座標的Z軸。因此,這裏是我在做什麼:如何使用Matlab R2015a顯示日誌比例顏色條?

surf(X,Y,Z) 
set(gca,'zscale','log') 

但我想出現在日誌規模的彩條,帶標籤的像10 ^( - 6),10 ^( - 5),10 ^( - 4) ...

尋找它,我發現了關於解決

h = colorbar 
set(h,'YScale','log') 

,但它不是用Matlab的最新版本的工作,因爲'YScale'參數不存在了。

有什麼想法?

非常感謝。

回答

1

即使你可以在彩條軸線和標籤更改爲對數刻度,你的數據仍然沒有對數座標,所以顏色條會顯得很奇怪。爲了解決這個問題,我可以建議另一個虛擬軸來保持色條。這裏是如何:

比方說,你繪製此:

[X,Y,Z] = peaks(50); 
s = surf(X,Y,Z); 
set(gca,'zscale','log') 
h = colorbar; 

我們下一步要做的是讓顏色條插入後的軸位置(以備將來使用):

axpos = s.Parent.Position; 

現在我們創建新軸,隱藏它們,並在第一個的相同位置添加一個彩條:

axes; 
axis off 
cb = colorbar('Position',h.Position); 

接下來我們調整colobar軸被顯示在圖形值(因爲Z<=0不顯示):

caxis(log10([min(Z(Z>0)) max(Z(:))])) 

我們改變了顏色條蜱標籤對數刻度格式:

cb.TickLabels = sprintf('10^{%1.1f}\n',cb.Ticks); 

最後,我們刪除第一個彩條,並設置軸位置回axpos

delete(h) 
set(s.Parent,'Position',axpos) 

,我們得到:

enter image description here

+0

非常感謝!我明白了,但仍然在運行完全相同的代碼時,我得到了一行「axpos = s.Parent.Position」的錯誤。 Matlab告訴我「嘗試引用非結構數組的字段」。任何想法可能是什麼問題? – MarieC

+0

@MarieC你說得​​對。我在那裏有一個小錯字,它應該是's = surf(X,Y,Z);'。現在糾正了。 – EBH

0

類似的問題在MATLAB forum

要點:你可以得到caxis,並修改它log值:

caxis(log([c(1) c(length(c))])); 
colorbar('FontSize',11,'YTick',log(c),'YTickLabel',c); 
+0

謝謝,但我不明白這將是在我的情況下,向量c ...我只是繪製兩個變量的函數 – MarieC

+0

c是數據的載體,如彩條限制來源於那裏。 –