在Matlab中删除两个特定数据点之间的线

时间:2012-10-05 22:38:50

标签: matlab matlab-figure

我将在Matlab中绘制一个图形。图表很简单,我正在使用绘图功能。 假设我要绘制的数据是(0:1:10)。我还在我的图表上添加了标记。然后,我们有一条在坐标(0,0),(1,1),(2,2),...等上有标记的线

现在,我想删除(2,2)(3,3)之间的行而不删除整行。也就是说,我的目的是摆脱线的特定部分而不会丢失整条线或任何标记点。

我该怎么做?

2 个答案:

答案 0 :(得分:6)

绘制之后删除线段很困难。您可以通过以下代码看到该行由一个MATLAB对象组成:

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

ans =

空矩阵:0乘1

我们可以看到该行没有子节点,因此我们无法删除“子节”。但是,我们可以使用一些厚颜无耻的技巧来尝试达到同样的效果。


分别绘制两行

...使用hold on。见Victor Hugo的回答。这是实现我们目标的正确方法。


在一个

中绘制两个单独的行

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]。

enter image description here


'删除'部分内容

这是最糟糕的做法,但是如果你不能为改变你的输入数组而烦恼,这是一个可以工作的廉价黑客。首先绘制线条:

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

enter image description here

现在在要擦除的部分上绘制一条白线:

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

enter image description here

正如您所看到的,结果看起来不太正确,如果您尝试对图表执行其他操作,则会反应不佳。简而言之,我不推荐这种方法,但它可能在绝望的时候有用!

答案 1 :(得分: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')

Graph result