UIAxesの最大プロット数
3 ビュー (過去 30 日間)
古いコメントを表示
目的:MATLAB AppにてUIAxesを用いデータ出力波形を表示させる
課題:データ数が多くUIAxes画面が固める事象が発生。
質問:UIAxesが表示できる最大プロット数を知りたい。
補足:MATLABバージョンはR2022bです。
宜しくお願い致します!!
0 件のコメント
回答 (1 件)
交感神経優位なあかべぇ
2024 年 6 月 30 日
編集済み: 交感神経優位なあかべぇ
2024 年 6 月 30 日
uiaxesのプロット数に上限は設けられていないと思いますが、たくさんのplotを表示するより、patchなどを利用してひとつのオブジェクトにデータを集約させるほうが軽くなります。
下記のコードはfigureベースのaxesの例ですが、おそらくuiaxesについても同様に軽くなると思います。
% サンプルデータ。1000個のデータを持つ500個のプロットデータ
x = 1:1000;
y = [rand(1,1000) + (1:500)'];
% 500個のプロットデータをひとつひとつ表示した場合の実行時間計測
tic;
ax = axes();
hold on;
for i = 1 : size(y,1)
plot(ax,x,y(i,:));
end
drawnow();
toc
% 多角形ではなく線情報の表示にするため、データの末尾にnanを挿入
x = [x,nan];
y = [y,nan(size(y,1),1)];
faces = reshape(1:numel(y), length(x), [])';% 多角形の辺の定義
vertices = [repmat(x',size(y,1),1), reshape(y',[],1)];% データ点の定義
% 各プロットの色を設定(ラインの色はlinesを使用)
color = lines();
color = [repmat(color, floor(size(y,1) / size(color,1)), 1); color(1:mod(size(y,1), size(color,1)),:)];
color = repelem(color, length(x), 1);
% patchを使用したプロットの描画時間の計測
tic;
figure();
patch('Faces', faces, 'Vertices', vertices, 'FaceColor', 'none', 'EdgeColor', 'flat', 'FaceVertexCData', color);
drawnow();
toc
2 件のコメント
交感神経優位なあかべぇ
2024 年 7 月 4 日
編集済み: 交感神経優位なあかべぇ
2024 年 7 月 4 日
figureベースのpcolorなら比較的軽いですが、Appのuifigureベースのpcolorは重たいですね…。
対策としては下記などかなぁと思います。
1. figureで表示する。
2. pcolorの使用を避ける。
1.の場合、Appのコールバック関数内に、下記のように記述すれば、別ウィンドウでfigureベースのpcolorを表示できます。
C = reshape(1:10000, 100, 100) .* 0.3;% 仮データ
figure;
pcolor(C);
2.の場合、xデータ, yデータが等間隔ならばimagescでだいたい同じような描画ができます。(imagescならば、軽いです。)
figure;
p = pcolor(C);
p.LineStyle = 'none';% 表示をimagescと合わせるため、Lineを削除
figure;
i = imagesc(C);
i.Parent.YDir = 'normal';% Y軸の方向をpcolorにあわせる。
参考
カテゴリ
Help Center および File Exchange で ビッグ データの処理 についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!