UIAxesの最大プロット数
2 views (last 30 days)
Show older comments
目的:MATLAB AppにてUIAxesを用いデータ出力波形を表示させる
課題:データ数が多くUIAxes画面が固める事象が発生。
質問:UIAxesが表示できる最大プロット数を知りたい。
補足:MATLABバージョンはR2022bです。
宜しくお願い致します!!
0 Comments
Answers (1)
交感神経優位なあかべぇ
on 30 Jun 2024
Edited: 交感神経優位なあかべぇ
on 30 Jun 2024
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 Comments
交感神経優位なあかべぇ
on 4 Jul 2024
Edited: 交感神経優位なあかべぇ
on 4 Jul 2024
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にあわせる。
See Also
Categories
Find more on ビッグ データの処理 in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!