在特定时间绘制垂直线

Plot vertical lines at a certain time

我想在某个 "x"(标量)值处绘制一条线,因此每秒都会绘制一条具有特定值的垂直线。我知道绘制垂直线(不考虑时间)的一种方法是声明一个向量,如:

y=0:0.01:5;

或类似的东西:

y=3:0.01:6;

然后写plot(x,y);

此外,我已经使用 "pause" 参数绘制了 "animated" 绘图,但我不知道在这种情况下该怎么做。感谢您的帮助。

在 Matlab 中有几种绘制垂直线的方法。最简单的推荐是 line 函数:

line(X,Y) adds the line defined in vectors X and Y to the current axes. If X and Y are matrices of the same size, line draws one line per column.

想调用多少次就调用多少次。

  h=line(X,Y)

会给你线的属性

另一种方式是

X= X0*(Y./Y)

然后

plot(X,Y)

将在点 X0 处绘制一条垂直线。您可以做的另一件事是使用上面的 line 函数从点 (X0, min(Y)) 到点 (X0, max(Y)) 画一条线,这是最优雅的解决方案。如果您尝试创建电影,则需要使用 h=line(X,Y) 访问该行的属性。要将线移动到新位置,您必须通过调用 set(h, Property, value) 来设置该线的属性。例如在你的电影中,你需要将它移动到一个新的位置,这样你就可以设置 属性。这样,通过最小的数据变化,您可以移动一条线或显示其加速。

我建议的另一种方法是将 plothold on 结合使用。使用 plot,您只需指定两个点,每个点具有相同的 x 值,但 y 值可以更改为您想要的任何值。当您使用 plot 绘制点时,默认行为是在点之间绘制一条线。如果我们指定具有相同 x 坐标但不同 y 坐标的两个点,我们基本上会在这些点之间绘制一条垂直线。

例如,假设你想让每个 "second" 都有一条垂直线,我们可以这样做:

ystart = [-1 -2 -3 -1 -2 -3];
yend = [1 2 3 1 2 3];

figure; hold on;
for idx = 1 : numel(ystart)
    plot([idx idx], [ystart(idx) yend(idx)]);
end

这是我们得到的:

我们定义了两个包含 6 个元素的数组,其中 ystart 表示起始 y 点,yend 表示结束 y 点。我们生成一个新图形,使用 hold on 在同一张图上绘制多条线,然后使用 for 循环和 plot 以便我们在两点之间画一条线:(x,y) = (idx, ystart(idx))(x,y) = (idx, yend(idx))idx 从 1 到 6。显然,您可以通过指定另一个数组来更改绘制 x 值的位置...称之为 x:

x = 0:2:10; %// Time values
ystart = [-1 -2 -3 -1 -2 -3];
yend = [1 2 3 1 2 3];

figure; hold on;
for idx = 1 : numel(ystart)
    plot([x(idx) x(idx)], [ystart(idx) yend(idx)]);
end

在这里,我们将从x = 0开始绘制垂直线,直到x = 10,步长为2。结果基本相同,但x值会不同,以及绘制垂直线的位置。