bar3を使用し、F​aceColorをi​nterpにした状態​で、z==0の平面の​色を取り除く、または​白にすることはできま​すか

4 次查看(过去 30 天)
Dai
Dai 2022-7-29
评论: Dai 2022-7-31
Z=[0 1 2 3;1 0 2 3;1 2 0 3];
b=bar3(Z);
colorbar
for k = 1:length(b)
zdata = b(k).ZData;
b(k).CData = zdata;
b(k).FaceColor = 'interp';
end
この後に、z==0の部分だけ透明もしくは白にするコードを付け加えたいです。
実際に起きている問題としては、z==0の平面に画像を挿入した際に、z==0のcolormapの色がモザイク状に表示されてしまうことです。
0をNaNで置き換えることは試しましたが、出力に変化はありませんでした。
  2 个评论
Dai
Dai 2022-7-30
ご回答ありがとうございます。
FaceColorをinterpにした状態で同様の内容を実行することは可能でしょうか
Atsushi Ueno
Atsushi Ueno 2022-7-30
の両方を実行する旨解釈し、回答を変更しました。
  • 面の色を内挿(’interp’)する必要があるので、面の透明度も’interp’に変更する必要がある
  • AlphaData 値の解釈は0/1なので'none'設定としていたが、'scaled' (既定値) に変更

请先登录,再进行评论。

采纳的回答

Atsushi Ueno
Atsushi Ueno 2022-7-29
编辑:Atsushi Ueno 2022-7-30
透明度の設定を書き加えました。
Z = [0 1 2 3;1 0 2 3;1 2 0 3];
A = repelem(Z,6,4) > 0; % 透明度のデータAを作る
b = bar3(Z);
colorbar
for k = 1:length(b)
zdata = b(k).ZData;
b(k).CData = zdata;
b(k).AlphaData = A(:,k*4-3:k*4); % 透明度のデータを設定
b(k).FaceColor = 'interp'; % 面の色
%b(k).EdgeColor = 'interp'; % エッジの色
b(k).FaceAlpha = 'interp'; % 面の透明度
b(k).EdgeAlpha = 'interp'; % エッジの透明度
end
  • プロットされたバーを変更するには、返された Surface オブジェクトのプロパティを変更します。Surface プロパティの一覧については、Surface のプロパティを参照してください。返される表面の XDataYDataZData の各プロパティは、頂点の組を表すよう設定されています。個別のバーやバーの面の色または透明度を変更するには、該当する頂点について目的のプロパティを設定します。n 個のバーがある系列の場合、返される Surface オブジェクトには 6n 個の頂点が含まれています。
【良く解る解説】
上記ヒントから明らかなように、bar3の構成情報(Surfaceオブジェクト)は、列ごとの設定になります。”EdgeAlpha" と ”FaceAlpha” にスカラ値(1:不透明, 0:透明)を設定出来ますが、スカラ値だと棒1本だけではなく1列にならんだ棒が全て透明になってしまいます。"AlphaData"は”ZData”と同じ 6面×4頂点=24個のデータで、各棒の頂点毎に透明度を設定出来ます。しかしながら、今回設定したい透明度は24点全て0か1と同じなので、元の入力データZを縦6個ずつ、横4個ずつに延ばして、z==0か否かで0か1に変換しました。
  1 个评论
Dai
Dai 2022-7-31
大変よくわかりました。丁寧なご回答ありがとうございます。

请先登录,再进行评论。

更多回答(0 个)

产品


版本

R2022a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!