使用 matlab 绘制线图时如何忽略负值?
How to ignore values that are negative when plotting a line plot with matlab?
我有一个矩阵,其中一些值具有 -1
作为存在错误的指示。通常我只会使用 ylim([0 100])
来不在我的图表中显示这些值,但是当使用折线图时,连接仍然会下降到点。我想要一个由线条组成的图表,而不是散点图。有没有一种简单的方法可以在绘制直线时忽略负值,而在使用 MATLAB 中的 plot 函数时只连接正值?
我已经编写了一个行为类似的小示例程序,但我使用的方式似乎有点 "too complicated" 我想知道是否有更简单的方法来实现这一点。当我将值设为 NaN
时效果很好,现在 x
和 y
的值相同。但是,从向量中删除或整理值将导致 x
和 y
值的数量不同。
我希望进行修改或标记或其他内容。
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)
请注意,这只是一个示例,整个代码太大,无法 post 放在这里。
当具有不对应的 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 must be the same length"。
a = [50, -1, 10, 5, 8, 22, -1];
b = a > 0;
c = a(b);
输出:
c
[50, 10, 5, 8, 22]
现在您可以绘制 c
[~, s] = size(c);
xx = 1:1:s;
也可以不保存计算,直接修改。只是绘制它。
plot(x(x>0))
这就像使用NaN
代替负值一样,只是根本没有修改原始向量。您可能会注意到此解决方案是矢量化的。
y = 2*randn(10,1) - randn(10,1);
figure(); plot(1:numel(y), y./(y<=0) );
我有一个矩阵,其中一些值具有 -1
作为存在错误的指示。通常我只会使用 ylim([0 100])
来不在我的图表中显示这些值,但是当使用折线图时,连接仍然会下降到点。我想要一个由线条组成的图表,而不是散点图。有没有一种简单的方法可以在绘制直线时忽略负值,而在使用 MATLAB 中的 plot 函数时只连接正值?
我已经编写了一个行为类似的小示例程序,但我使用的方式似乎有点 "too complicated" 我想知道是否有更简单的方法来实现这一点。当我将值设为 NaN
时效果很好,现在 x
和 y
的值相同。但是,从向量中删除或整理值将导致 x
和 y
值的数量不同。
我希望进行修改或标记或其他内容。
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)
请注意,这只是一个示例,整个代码太大,无法 post 放在这里。
当具有不对应的 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 must be the same length"。
a = [50, -1, 10, 5, 8, 22, -1];
b = a > 0;
c = a(b);
输出:
c
[50, 10, 5, 8, 22]
现在您可以绘制 c
[~, s] = size(c);
xx = 1:1:s;
也可以不保存计算,直接修改。只是绘制它。
plot(x(x>0))
这就像使用NaN
代替负值一样,只是根本没有修改原始向量。您可能会注意到此解决方案是矢量化的。
y = 2*randn(10,1) - randn(10,1);
figure(); plot(1:numel(y), y./(y<=0) );