当前位置: 首页 > 面试题库 >

在matplotlib中定义要使用for循环设置动画的多个绘图

汪弘毅
2023-03-14
问题内容

我知道如何开始用matplotlib. 以下是示例代码:

from matplotlib import pyplot as plt
from matplotlib import animation

fig = plt.figure()

ax = plt.axes(xlim=(0, 2), ylim=(0, 100))

line, = plt.plot([], [])

def init():
    line.set_data([], [])
    return line,

def animate(i):
    line.set_data([0, 2], [0,i])
    return line,

anim = animation.FuncAnimation(fig, animate, init_func=init,
                               frames=100, interval=20, blit=True)

plt.show()

假设现在我想绘制成吨的函数(这里是四个),用
一个循环的帮助。我做了一些巫毒编程,试图了解如何
模仿下面的逗号,这里是我得到的(不用说
不起作用:AttributeError:'tuple'对象没有属性'axes')。

from matplotlib import pyplot as plt
from matplotlib import animation

fig = plt.figure()

ax = plt.axes(xlim=(0, 2), ylim=(0, 100))

line = []
N = 4

for j in range(N):
    temp, = plt.plot([], [])
    line.append(temp)

line = tuple(line)

def init():
    for j in range(N):
        line[j].set_data([], [])
    return line,

def animate(i):
    for j in range(N):
        line[j].set_data([0, 2], [10 * j,i])
    return line,

anim = animation.FuncAnimation(fig, animate, init_func=init,
                               frames=100, interval=20, blit=True)

plt.show()

*我的问题是:我怎样才能让它工作?奖金(可能有联系):什么
是’line,=plt.绘图([],[])行=plt.绘图([],
[])`?
谢谢


问题答案:

在下面的解决方案中,我展示了一个更大的示例(还有条形图
这可能有助于人们更好地理解应该为其他情况做些什么。
在代码之后,我解释了一些细节并回答了奖金问题。

import matplotlib
matplotlib.use('Qt5Agg') #use Qt5 as backend, comment this line for default backend

from matplotlib import pyplot as plt
from matplotlib import animation

fig = plt.figure()

ax = plt.axes(xlim=(0, 2), ylim=(0, 100))

N = 4
lines = [plt.plot([], [])[0] for _ in range(N)] #lines to animate

rectangles = plt.bar([0.5,1,1.5],[50,40,90],width=0.1) #rectangles to animate

patches = lines + list(rectangles) #things to animate

def init():
    #init lines
    for line in lines:
        line.set_data([], [])

    #init rectangles
    for rectangle in rectangles:
        rectangle.set_height(0)

    return patches #return everything that must be updated

def animate(i):
    #animate lines
    for j,line in enumerate(lines):
        line.set_data([0, 2], [10 * j,i])

    #animate rectangles
    for j,rectangle in enumerate(rectangles):
        rectangle.set_height(i/(j+1))

    return patches #return everything that must be updated

anim = animation.FuncAnimation(fig, animate, init_func=init,
                               frames=100, interval=20, blit=True)

plt.show()

解释

这样做的目的是绘制出你需要的内容,然后重用这些艺术家(见更多)
这里)由“matplotlib”返回。
这是通过首先绘制一个你想要的虚拟草图并保持对象“matplotlib”为您提供。然后在“init”和“animate”函数上
可以更新需要设置动画的对象。
注意,在plt.绘图([],[])[0]我们有一个线条艺术家,因此我把它们收集起来[plt.绘图([],[])[0]表示范围(N)]。另一方面
扁钢([0.5,1,1.5],[50,40,90],width=0.1)返回可以
矩形艺术家迭代。list(矩形)just convert this将容器放入一个要与“行”连接的列表中。
我将线条与矩形分开,因为它们的更新方式不同
(和是不同的艺术家)但是’init’和’animate’返回所有的艺术家。
问题答案:
1行,=plt.绘图([],[])指定返回的列表的第一个元素plt.绘图到可验证的“行”。
2直线=plt.绘图([],[])只需分配整个列表(仅一个元素)。



 类似资料:
  • 问题内容: 感谢Jake Vanderplas,我知道如何开始使用来编写动画情节。这是一个示例代码: 假设现在我想绘制大量的功能(在这里说四个),这些功能是在循环的帮助下定义的。我做了一些voodoo编程,试图了解如何模仿下面的逗号,这就是我所得到的(不必说它不起作用:)。 我的问题是: 我该如何运作?红利(可能是关联的):和之间有什么区别? 谢谢 问题答案: 在下面的解决方案中,我展示了一个更大

  • 问题内容: 我希望Matplotlib /Pyplot生成具有一致画布大小的图。也就是说,图形可以具有不同的大小以适应轴的描述,但是绘图区域(绘制曲线的矩形)应始终具有相同的大小。 有没有简单的方法可以做到这一点?pyplot.figure()的figsize选项似乎设置了图形的整体大小,而不是画布的整体大小,因此,每当轴描述占据或多或少的空间时,我都会得到不同的画布大小。 问题答案: 这是我对M

  • 我有一个简单的动画文件: 基本上,这会将一个组件沿X轴向左滑动50 dp。我已经成功地将它附加到一个组件上,它工作得非常完美,但是当我尝试同时将它附加到多个组件上时,动画只适用于最后一个组件。 例如:我有5张牌。AI敌人从手中随机选择一张牌。但是我想动画敌人“捡”卡。这就是动画发挥作用的地方。 比如说: 这里的目标是循环阵列中的每张卡,并将其滑出X轴。但动画只出现在最后一张牌上(阵列中的第五张牌)

  • 我正试图用OpenCV实时地从相机中绘制一些数据。然而,实时绘图(使用matplotlib)似乎不起作用。 我希望这个例子能画出1000个点。实际发生的情况是,窗口弹出并显示第一个点(可以了),然后等待循环完成,然后填充图的其余部分。 有什么想法为什么我没有看到点一次一个?

  • 本文向大家介绍Python matplotlib读取excel数据并用for循环画多个子图subplot操作,包括了Python matplotlib读取excel数据并用for循环画多个子图subplot操作的使用技巧和注意事项,需要的朋友参考一下 读取excel数据需要用到xlrd模块,在命令行运行下面命令进行安装 pip install xlrd 表格内容大致如下,有若干sheet,每个sh

  • 问题内容: 我想知道是否可以使用for循环设置多个属性: 目前我有十二个QLineEdit框 LineEdit1,LineEdit2,…,LineEdit12,我希望用更少的代码来做到这一点。我尝试了上述方法,但它没有像我期望的那样遍历LineEdit框。将只对名单的工作? 问题答案: 为此任务,您可以使用: