4

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

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

我怎样才能做到这一点?

4

2 回答 2

6

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

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

答案=

空矩阵:0×1

我们可以看到这条线没有孩子,所以没有我们可以删除的“子部分”。但是,我们可以使用一些厚颜无耻的技巧来尝试达到相同的效果。


分别绘制两条线

...使用hold on. 见维克多雨果的回答。这是实现我们目标的正确方法。


将两条单独的线合二为一

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 回答