LoginSignup
5
4

More than 5 years have passed since last update.

[matlab] 隠れちゃった線を手前に持ってくる

Posted at

疲れてしまったのでqiitaへmatlabに関する記事を投稿して徳を積もうと思います。

objective

グラフオブジェクトを操って隠れちゃった線を手前に持ってくる

graphical abstract (Before/After)

Before: 青線見えない
samplecurves.jpg

After: 青線見える
samplecurvesmodified.jpg

what is important

g = get(gca); とやると、matlabではgにグラフオブジェクトが取得できます。
ここが今日のコツです。

よくわからないと思うのでサンプルコードを示していきます。

sample code

Before の方の図を下記コードから作成。

figure;

range = 0:0.01:2*pi;
hold on;
linewidth = 'LineWidth';
linewidthval = 4; % Line Width

plot(range(1:100), sin(range(1:100)), '-b', linewidth, linewidthval);
plot(range, sin(range), '-r', linewidth, linewidthval);
plot(range, ones(1, length(range)), '-k', linewidth, linewidthval);

samplecurves.jpg

青い線が、赤い線の奥に隠れてしまいました。

そこで、グラフオブジェクトを取得して、プロットの順番を変えてセットし直す、ということをします。
てめぇ何言ってんだッて感じだと思うのでまたサンプルコードです。

>> g = get(gca);% グラフオブジェクトを取得。
>> g.Children% g.Childrenには、plot objectとでも呼ぶべきものが詰まっています。

ans = 

  3x1 Line 配列:

  Line    (data3)
  Line    (data2)
  Line    (data1)

>> set(gca, 'Children', [g.Children(3) g.Children(2) g.Children(1)])% ひっくり返してセットし直す

このコードはgetter/setterでgcaからグラフ情報を引っ張りだしてるんですね。

で、その子要素(ここだとg.Children)のプロットオブジェクトの順番を入れ替えた配列を作って
setterで再度代入すると、プロットの重なる順序が代わるんですね。

わっかりやすぅ~!

で、結果ドン!

samplecurvesmodified.jpg

無事に青い線が手前に来ました。

reference

下記のも参考にしました。ちゃんちゃん。

% オブジェクトのハンドル番号を検出
h = get(gca,'Children'); % 軸オブジェクトの子オブジェクトを取得(複数の場合はベクトル)
hg = findobj(h,'type','line','Color','b'); % 青色のlineオブジェクトを検出

% オブジェクトの順番の入れ替え
% 青色ラインの要素を取得
ind = (h == hg); % h において hg であるかどうかを論理値で出力

% 青色ラインのハンドルを一番上に設定
newh = [h(ind); h(~ind)]; % h(ind):青色ラインのハンドル、h(~ind):それ以外のハンドル

set(gca,'children',newh) % Childrenプロパティ値の再設定(順番の入れ替え)

via プロット表示されたグラフにおいて、任意のラインを一番上に表示させる方法はありますか? - MATLAB Answers - MATLAB Central

ちなみにこんな記事も書きました。

[matlab] 複数系列のうち1つだけに名前を付けて表示する方法

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4