首页 文章

如何用matlab绘制线图时忽略负值?

提问于
浏览
1

我有一个矩阵,其中一些值有 -1 表示存在错误 . 通常我会使用 ylim([0 100]) 在我的图表中不显示这些值,但是当使用折线图时,连接仍然会下降到这一点 . 我想要一个由线条组成的图表,而不是散点图 . 在绘制线时是否有一种忽略负值的简单方法,并且在MATLAB中使用绘图函数时仅连接正值?

我编写了一个小例子程序,其行为类似,但我使用的方式似乎有点"too complicated"我想知道是否有更简单的方法来实现这一点 . 它将值设置为 NaN 时工作正常,现在 xy 值相同 . 但是,删除或整理向量中的值将导致不同数量的 xy 值 .

我希望修改或标志或其他东西 .

x = 2*rand(10) - rand(10)
xx = 10:10:100;

figure;
for i=1:length(x)
    for j=1:length(x(i,:))
        if x(i,j) < 0
           x(i,j) = NaN; 
        end
    end
end

plot(xx,x)

请注意,这只是一个示例,整个代码太大,无法在此处发布 .

当具有非对应的 x -值(使得绘图函数仅使用 1,2,3... 等等对应的 y 值)时,可以通过使用

plot(x(x>0))

在这种情况下,相应的值是不同的,在实际代码中它们是测量数据,这里我简单地使用第10步来简化 .

x = 2*rand(10) - rand(10)
xx = 10:10:100;

plot(xx,x(x>0))

上面的代码将出错,消息“Vectors必须是相同的长度” .

2 回答

  • 4

    这就像使用 NaN 而不是负值一样,只是原始矢量根本不被修改 . 您可能会注意到此解决方案是矢量化的 .

    y = 2*randn(10,1) - randn(10,1);
    figure(); plot(1:numel(y), y./(y<=0) );
    
  • 1
    a = [50, -1, 10, 5, 8, 22, -1];
    b = a > 0;
    c = a(b);
    

    Output:

    c
    [50, 10, 5, 8, 22]
    

    现在你可以绘制c

    [~, s] = size(c);
    xx = 1:1:s;
    

    您也可以直接执行此操作而不保存计算并进行修改 . 只是绘制它 . plot(x(x>0))

相关问题