Clear Filters
Clear Filters

UIAxesの最大プロット数

37 views (last 30 days)
健斗
健斗 on 26 Jun 2024 at 2:30
目的:MATLAB AppにてUIAxesを用いデータ出力波形を表示させる
課題:データ数が多くUIAxes画面が固める事象が発生。
質問:UIAxesが表示できる最大プロット数を知りたい。
補足:MATLABバージョンはR2022bです。
宜しくお願い致します!!

Answers (1)

交感神経優位なあかべぇ
交感神経優位なあかべぇ on 30 Jun 2024 at 7:22
Edited: 交感神経優位なあかべぇ on 30 Jun 2024 at 7:23
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
Elapsed time is 0.763610 seconds.
% 多角形ではなく線情報の表示にするため、データの末尾に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
Elapsed time is 0.376400 seconds.
  2 Comments
健斗
健斗 on 3 Jul 2024 at 5:13
回答頂き、ありがとうございます!
質問の方が、言葉足らずで申し訳ございません。
今回、pcolorで図を書かせておりまして、pcolorを用いた場合の対策等ございましたら、
ご教授頂けると幸いです。
お手数をおかけしますが、宜しくお願い致します。
交感神経優位なあかべぇ
交感神経優位なあかべぇ on 4 Jul 2024 at 13:16
Edited: 交感神経優位なあかべぇ on 4 Jul 2024 at 13:19
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にあわせる。

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!