2017-07-30 11 views
1

私はMatlabで関数surfを使って3Dプロットを表示しようとしています。私はそれをz軸の対数スケールにする必要があります。だからここに私がやっているものです:Matlab R2015aでログスケールカラーバーを表示するにはどうしたらいいですか?

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

をしかし、私は10 ^のようなラベルで、対数スケールで表示されるカラーバーをしたいと思います( - 6)、10 ^( - 5)、10 ^( - 4) 、...

それを見て、私は解決策

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

知ったけど'YScale'パラメータがもはや存在しないため、それは、MATLABの最新バージョンで作業していません。

ありがとうございます。

答えて

1

、あなたのデータは、対数スケールではまだありませんカラーバーが奇妙に見えます。これを修正するために、カラーバーを保持する別のダミー軸を提案することができます。

するのは、あなたがこれをプロットしてみましょう::ここではどのように今、私たちが作成

axpos = s.Parent.Position; 

:私たちの次のステップは、(将来の使用のための)カラーバーの挿入後の軸の位置を取得することです

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

新しい軸を追加して非表示にし、最初の位置と同じ位置にカラーバーを追加します:

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

次は(Z<=0が表示されないため)プロットに表示されている値にcolobar軸調整:

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どうなるか...私はちょうど2つの変数の関数をプロットしています得ることはありません – MarieC

+0

カラーバーの制限が由来しているように、Cは、データのあなたのベクトルでありますそこ。 –

関連する問題