Clear Filters
Clear Filters

線データを積み重ねてplot

65 views (last 30 days)
綾一 栗原
綾一 栗原 on 27 Jun 2024 at 19:44
Commented: 綾一 栗原 on 2 Jul 2024 at 10:41
STFTした強度周波数データを,手前から奥に積み重ねてplotしたいです
イメージとしてはこのような図です(pが振幅スペクトル,fが周波数,tが時間)
よろしくお願いします.

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 28 Jun 2024 at 14:39
Edited: Atsushi Ueno on 29 Jun 2024 at 5:07
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
Atsushi Ueno
Atsushi Ueno on 29 Jun 2024 at 4:58
出来上がった色データをみて気づいたのですが、色データとグリッドデータは同じ構造ですね。
なので meshgrid 関数を活用して色データを作るのも一つの手だと思います。
綾一 栗原
綾一 栗原 on 2 Jul 2024 at 10:41
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!