bar3を使用し、FaceColorをinterpにした状態で、z==0の平面の色を取り除く、または白にすることはできますか
3 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
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 Commenti
Atsushi Ueno
il 30 Lug 2022
- 高さによる 3 次元棒グラフの色分け
- z==0の部分だけ透明もしくは白にする
の両方を実行する旨解釈し、回答を変更しました。
- 面の色を内挿(’interp’)する必要があるので、面の透明度も’interp’に変更する必要がある
- AlphaData 値の解釈は0/1なので'none'設定としていたが、'scaled' (既定値) に変更
Risposta accettata
Atsushi Ueno
il 29 Lug 2022
Modificato: Atsushi Ueno
il 30 Lug 2022
透明度の設定を書き加えました。
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
3 次元棒グラフ - MATLAB bar3 - MathWorks 日本 (ヒントを下記に抜粋)
- プロットされたバーを変更するには、返された Surface オブジェクトのプロパティを変更します。Surface プロパティの一覧については、Surface のプロパティを参照してください。返される表面の XData、YData、ZData の各プロパティは、頂点の組を表すよう設定されています。個別のバーやバーの面の色または透明度を変更するには、該当する頂点について目的のプロパティを設定します。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に変換しました。
Più risposte (0)
Vedere anche
Categorie
Scopri di più su 表面プロットとメッシュ プロット in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!