【问题标题】:Plot vertical lines at a certain time在特定时间绘制垂直线
【发布时间】:2017-09-04 08:39:36
【问题描述】:

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

y=0:0.01:5;

或类似的东西:

y=3:0.01:6;

然后写plot(x,y);

另外,我已经使用“暂停”参数完成了“动画”绘图,但在这种情况下我不知道该怎么做。感谢您的帮助。

【问题讨论】:

  • 什么是'x'?我如何复制过去的示例以查看它的工作原理?

标签: matlab plot


【解决方案1】:

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

例如,假设您希望每个“秒”都有一条垂直线,我们可以这样做:

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 = 0x = 10的垂直线,步长为2。结果基本相同,但x的值会有所不同,以及垂直线的位置正在绘制中。

【讨论】:

  • 好的,我试试。谢谢。
  • 一定要告诉我。如果它有效,我不介意你接受我的回答。祝你好运!
  • 在 for 循环中添加“pause(1)”行使其按我的意愿工作。谢谢,我一定会的。
【解决方案2】:

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

line(X,Y) 将向量 X 和 Y 中定义的线添加到当前 轴。如果 X 和 Y 是相同大小的矩阵,line 画一条线 每列。

根据需要多次调用。

  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) 来设置该线的属性。例如,在您的电影中,您需要将其移动到新位置,以便设置该属性。这样,通过最小的数据变化,您可以移动一条线或显示其加速。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    • 2014-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-13
    • 2015-07-27
    相关资源
    最近更新 更多