4

Matlabでグラフを描いていきます。グラフは非常に単純で、プロット関数を使用しています。プロットしたいデータが(0:1:10). また、グラフにマーカーを付けました。(0,0),(1,1),(2,2),...次に、座標などにマーカーを持つ線があります。

ここで、行全体を削除せずに(2,2)、間の行を削除したいと思います。(3,3)つまり、私の目的は、線全体やマーカー ポイントを失うことなく、線の特定のセグメントを取り除くことです。

どうやってやるの?

4

2 に答える 2

6

プロットした後でラインのセクションを削除するのは困難です。次のコードによって、ラインが 1 つの MATLAB オブジェクトで構成されていることがわかります。

x = 1:10;
y = 1:10;
H = plot(x, y, '-o');
get(H, 'children')

ans =

空行列: 0 行 1 列

行に子がないことがわかります。そのため、削除できる「サブパーツ」はありません。ただし、同じ効果を達成するために使用できるいくつかの生意気なトリックがあります。


2 つの線を別々にプロットする

...を使用してhold onいます。ヴィクトル・ユーゴーの答えを見てください。これが私たちの目標を達成する正しい方法です。


2 つの別々の線を 1 つにプロットする

MATLAB は NaN 値を持つ点をプロットしません。入力ベクトルを変更することにより、MATLAB がポイントをスキップして破線の効果を与えることができます。

x = [0 1 2 2 3 4 5 6 7 8 9];
y = [0 1 2 nan 3 4 5 6 7 8 9];
plot(x, y, '-o');

これは、[0, 0] から [2, 2] までの線をプロットし、次の点を飛ばして [3, 3] から再開し、[9, 9] まで続けることと同じです。

ここに画像の説明を入力


行の一部を「消去」

これは最も厄介な方法ですが、入力配列を変更することに煩わされない場合に機能する安価なハックです。最初に次の行をプロットします。

x = 1:10; y = 1:10;
plot(x, y, '-o');

ここに画像の説明を入力

消去したい部分に白い線を引きます:

hold on
plot([2 3], [2 3], 'w');

ここに画像の説明を入力

ご覧のとおり、結果はまったく正しくないように見えます。グラフに対して他のことをしようとすると、反応が悪くなります。要するに、この方法はお勧めしませんが、絶望的な時に役立つかもしれません!

于 2012-10-05T23:03:36.120 に答える
2

次のことを試してください。

y = [0.2751 0.2494 0.1480 0.2419 0.2385 0.1295 0.2346 0.1661 0.1111];
x = 1:numel(y);

plot(x(1:4), y(1:4), '-x')
hold
plot(x(5:end), y(5:end), '-x')

グラフ結果

于 2012-10-05T22:48:37.090 に答える