【问题标题】:Removing the line between two specific data points in Matlab在 Matlab 中删除两个特定数据点之间的线
【发布时间】:2012-10-05 22:38:50
【问题描述】:

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

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

我该怎么做?

【问题讨论】:

    标签: matlab matlab-figure


    【解决方案1】:

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

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

    ans =

    空矩阵: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');
    

    如您所见,结果看起来不太正确,如果您尝试对图表执行其他操作,结果会很糟糕。简而言之,我不会推荐这种方法,但它可能会在绝望的时候派上用场!

    【讨论】:

    • +1 白线的好技巧。使用nan 也很酷:-)
    【解决方案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')
    

    【讨论】:

    • 嗯,其实我的真实数据如下 0.2751 0.2494 0.1480 0.2419 0.2385 0.1295 0.2346 0.1661 0.1111 我想看1和2、2和3、3和4之间的线,那我不要看到 4 和 5 之间的线。但是,我想看到 5 和 6、6 和 7、7 和 8 之间的线。等等。
    • 你提出的方案只适用于递增序列。对吗?
    • 非常感谢!你救了我的一天!这绝对有效,并且是我试图找出的答案
    猜你喜欢
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    相关资源
    最近更新 更多