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

emp*_*per 4 matlab matlab-figure

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

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

我怎样才能做到这一点?

Bil*_*ham 6

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

x = 1:10;
y = 1:10;
H = plot(x, y, '-o');
get(H, 'children')
Run Code Online (Sandbox Code Playgroud)

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');
Run Code Online (Sandbox Code Playgroud)

这相当于绘制从[0,0]到[2,2]的一条线,跳过下一个点,然后再次从[3,3]开始并继续到[9,9].

在此输入图像描述


'擦除'部分线

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

x = 1:10; y = 1:10;
plot(x, y, '-o');
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

hold on
plot([2 3], [2 3], 'w');
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

  • 用白线+1好玩法.使用`nan`也很酷:-) (2认同)