gpt4 book ai didi

python - 动态绘制 n 个图

转载 作者:行者123 更新时间:2023-11-28 17:36:49 24 4
gpt4 key购买 nike

我正在编写测量程序,matplotlib 用于显示获得的测量值。我想出了如何为单个情节做到这一点,即

x=[0,1,2]
y=[3,5,7]
set_xdata(x)
set_ydata(y)

每次 x 和 y 改变时,我调用 set_xdataset_ydata 并刷新图表。

但是,我想根据单个 x 值动态绘制 n y 值,即

x=[0,1,2]
y=[[3,5,7],[4,6,8],[5,7,9]]

知道 n(y 图的数量)是否有可能做到这一点?

编辑:

我对两件事感兴趣:

  1. 如何在每次数据更改时只刷新多图数据而不是完全重绘图?
  2. matplotlib 是否支持针对单个 X 数据绘图的多个 Y 数据?

最佳答案

简而言之:您必须为每个“图”创建一个 Line2D 实例。稍微详细一点:

  1. 正如您对单行所做的一样,您也可以对多行​​执行相同的操作:

    import matplotlib.pyplot as plt

    # initial values
    x = [0,1,2]
    y = [[3,5,7],[4,6,8],[5,7,9]]

    # create the line instances and store them in a list
    line_objects = list()
    for yi in y:
    line_objects.extend(plt.plot(x, yi))

    # new values with which we want to update the plot
    x = [1,2,3]
    y = [[4,6,8],[5,7,9],[6,8,0]]

    # update the y values dynamically (without recreating the plot)
    for yi, line_object in zip(y, line_objects):
    line_object.set_xdata(x)
    line_object.set_ydata(yi)
  2. 不是真的。但是,您可以通过一次调用 plot 创建多个 Line2D 对象:

    line_objects = plt.plot(x, y[0], x, y[1], x, y[2])

    这也是为什么 plot 总是返回一个列表。

编辑:

如果您必须经常这样做,使用辅助函数可能会有所帮助:

例如:

def plot_multi_y(x, ys, ax=None, **kwargs):
if ax is None:
ax = plt.gca()
return [ax.plot(x, y, **kwargs)[0] for y in ys]

def update_multi_y(line_objects, x, ys):
for y, line_object in zip(ys, line_objects):
line_object.set_xdata(x)
line_object.set_ydata(y)

然后你就可以使用:

# create the lines
line_objects = plot_multi_y(x, y)

#update the lines
update_multi_y(line_objects, x, y)

关于python - 动态绘制 n 个图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29691912/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com