appdesignerでyyaxisをrightに設定した時のy軸メモリのリセット方法
5 views (last 30 days)
Show older comments
appdesignerでaxisをleftとrightでそれぞれ設定し、yyaxisがrightの時、元々プロットしてあったlineを削除し、新しくplotするとき、Y軸メモリ間隔がリセットされません。Y軸メモリをリセットする方法を教えてください。
・mファイルで実行した場合
clear; clc; close;
ax = axes;
x = 1:100; % Xのデータ
y_left = 2.*x; % 第1軸のyのデータ(左Y軸)
yyaxis(ax, 'left') % 左のY軸を有効
line1 = plot(x,y_left); % 図のプロット
yyaxis(ax, 'right') % 右Y軸を有効
y_right1 = x.^2; % 第2軸のYのデータ(右Y軸)
line2 = plot(x,y_right1); % 図のプロット
ax.YTick = 0.9 * min( y_right1 ) : 500 : 1.1 * max( y_right1 );
delete(line2); % 右Y軸を有効にしたプロット図を削除
ax.YTick = []; % 右Y軸のメモリを削除
ax.YTickMode = "auto"; % 右Y軸のメモリ間隔を「manual」→「auto」に変更
y_right2 = x.^4; % 右Y軸のYのデータ(右Y軸)
line2 = plot(x,y_right2); % メモリ間隔は最適に配置される
appdesignerでなく、普通のmファイルのテキストで上記のコードを実行すると、右Y軸のデータを削除(delete(line2) )し、再度、右Y軸にプロットすると、Y軸のメモリ間隔は最適に配置されます(deleteで消す前の図の時のY軸のメモリ間隔が残らずにリセットされる。)
しかし、appdesignerで以下のようにaxisとcheakboxを配置し、cheakboxが押された時にmakefig関数を実行するアプリを作ると、y軸メモリがdeleteで消したプロット図のメモリ間隔がずっと残り、deleteした後に再度プロットするとメモリ間隔が変になってしまいます。
cheakboxを押した時に実行されるmakefig関数は以下の通り。(内容はmファイルで実行した時の流れと同じ)
function [YRight] = makefig(AppAx , YRight)
x = 1:100; % Xのデータ
y_left = 2.*x; % 第1軸のyのデータ(左Y軸)
yyaxis(AppAx , 'left') % 左のY軸を有効
L1 = plot(AppAx,x,y_left); % 図のプロット
yyaxis(AppAx , 'right') % 右Y軸を有効
y_right1 = x.^2; % 第2軸のYのデータ(右Y軸)
YRight = plot(AppAx,x,y_right1); % 図のプロット
AppAx.YTick = 0.9 * min( y_right1 ) : 500 : 1.1 * max( y_right1 );
delete(YRight); % 右Y軸を有効にしたプロット図を削除
ax.YTick = []; % 右Y軸のメモリを削除
ax.YTickMode = "auto"; % 右Y軸のメモリ間隔を「manual」→「auto」に変更
y_right2 = x.^4; % 右Y軸のYのデータ(右Y軸)
% Y軸のメモリ間隔がリセットされない、delete関数を実行する前のY軸の間隔になる
YRight = plot(AppAx,x,y_right2); % メモリ間隔が変になる
end
引数の一つ目にアプリの座標軸であるaxis、引数の二つ目に、第二軸のプロット線を渡しています。
また、makefig関数の返り値である「YRight」はappdesinger側でプロバティとして設定しています。
mファイルとappdesignerでコードの流れは一緒なのに、Y軸のメモリがmファイル側ではリセットされるのに、appdesingerではリセットされない原因と対処方法がわかるかたいましたら、教えていただけると幸いです。
Answers (0)
See Also
Categories
Find more on Annotations in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!