線データを積み重ねてplot

STFTした強度周波数データを,手前から奥に積み重ねてplotしたいです
イメージとしてはこのような図です(pが振幅スペクトル,fが周波数,tが時間)
よろしくお願いします.

 Accepted Answer

Atsushi Ueno
Atsushi Ueno on 28 Jun 2024
Edited: Atsushi Ueno on 29 Jun 2024

0 votes

mesh, meshzwaterfall など、surface & mesh系プロットで描けます。
両者の違いはデフォルトの描画スタイルや戻り値のオブジェクトです。
強度周波数データ (1次元配列) を積み重ねて2次元配列 y にしてください。
描画には 2 次元のグリッド座標も必要です。詳細は meshgrid を参照願います。
カメラ座標は view 関数や figure 上のマウス操作でグリグリ動かせます。
[t,x] = meshgrid(-3:.125:3); % グリッド座標
y = abs(peaks(t,x)); % 高さデータ
mesh(t,x,y,'MeshStyle','column','FaceAlpha',0);
% MeshStyle: 表示するエッジ:'row':横線のみ,'column':縦線のみ, 'both':両方
% FaceAlpha: 透明度:0が透明、1が不透明、0<FaceAlpha<1が半透明

4 Comments

ありがとうございます!!まさにこれです!!
mesh(t,x,y,'MeshStyle','column','FaceAlpha',0);
set(gca,'YDir','reverse')
set(gca, 'XAxisLocation','origin' );
こちらで実装できました!!!
因みになのですが,高さで色変化ではなく一列が同じ色で,列ごとに色を変える方法がございましたらご教授いただけると幸いです.
よろしくお願いします.
「高さデータ y」と同サイズの「色データ c」を作って、下記プロパティを設定すれば良いです。
プロパティEdgeColor: 'flat'CData プロパティの値に基づいてエッジごとに異なる色を使用」
下記コードでは matlab colormap - 検索 / X の「 1ドット毎に色の異なる 'lines'」を使いました。
[t,x] = meshgrid(-3:.125:3); % グリッド座標
y = abs(peaks(t,x)); % 高さデータ
c = permute(colormap('lines'),[3,1,2]); % 色データ
c = c(:,1:size(y,2),:); % 切って
c = repmat(c,[size(y,1),1,1]); % 伸ばす
mesh(t,x,y,c,'MeshStyle','column','FaceAlpha',1,'EdgeColor','flat');
set(gca,'YDir','reverse')
set(gca,'XAxisLocation','origin');
Atsushi Ueno
Atsushi Ueno on 29 Jun 2024
出来上がった色データをみて気づいたのですが、色データとグリッドデータは同じ構造ですね。
なので meshgrid 関数を活用して色データを作るのも一つの手だと思います。
meshgridで色データがうまく作れなかったので,かなり強引にやりました.
%色データ
a=permute(colormap('lines'),[3,1,2]); %色情報生成
b=repmat(a,[size(y,1),round(size(y,2)/size(x,2)+1),1]); %無理やり配列サイズに延長
b=b(:,1:size(y,2),:); %余った分をトリミング
%plot
mesh(t,x,y,b,'MeshStyle','column','FaceAlpha',0);
%format
xlim([0,0.2])
ylim([1,1500])
set(gca,'YDir','reverse')
set(gca, 'XAxisLocation','origin' );
view([-75 25])
結果はこのようになりました
ちょっと見にくいですが狙い通りには行きました!
ありがとうございました!!

Sign in to comment.

More Answers (0)

Products

Release

R2023a

Community Treasure Hunt

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

Start Hunting!