Python 子图2中的条形图

Python 子图2中的条形图,python,matplotlib,subplot,Python,Matplotlib,Subplot,我想有几个子图,其中两个显示来自视频提要的帧,第三个以条形图的形式显示计算结果。 创建matplotlib图形后,我创建了几个子图2Grid,然后使用FuncAnimation更新这些子图 我创建条形图(待更新)的常用方法是: 我现在尝试在其他子图的旁边添加条形图: fig = plt.figure() plt1 = plt.subplot2grid((2, 2), (0, 0), rowspan=2) plt2 = plt.subplot2grid((2, 2), (0, 1)) #Conf

我想有几个子图,其中两个显示来自视频提要的帧,第三个以条形图的形式显示计算结果。 创建matplotlib图形后,我创建了几个子图2Grid,然后使用FuncAnimation更新这些子图

我创建条形图(待更新)的常用方法是:

我现在尝试在其他子图的旁边添加条形图:

fig = plt.figure()
plt1 = plt.subplot2grid((2, 2), (0, 0), rowspan=2)
plt2 = plt.subplot2grid((2, 2), (0, 1))

#Confusion with the following
bar_plot = plt.subplot2grid((2,2), (1,1))
ax = plt.axes(xlim=(0, 9), ylim=(0, 100))
rects = plt.bar(res_x, res_y, color='b')


def animate(args):
    ...
    ...

    im1 = plt1.imshow(...)
    im2 = plt2.imshow(...)

    for rect, yi in zip(rects, results):
        rect.set_height(yi*100)
    return im1, im2, rects

anim = animation.FuncAnimation(fig, animate, frames=200, interval=20, blit=True)
plt.show()
我得到以下错误:AttributeError:“BarContainer”对象没有属性“set\u animated”

你知道如何将条形图“放置”为子图,并将其与子图中的其他数据一起更新吗


谢谢

错误来自行
返回im1、im2、rects

在工作解决方案中,您有
返回rects
,即返回具有
设置动画
方法的艺术家列表。在失败的代码中,有一个由一个BarContainer和两个Artister组成的元组。如错误所示,AttributeError:“BarContainer”对象没有属性“set_animated”

一个解决方案可能是生成一个BarContainer的内容列表,您可以将其连接到其他两个艺术家

return [rect for rect in rects]+[im1, im2]
一个完整的工作示例:

import matplotlib.pyplot as plt
import matplotlib.animation as animation

res_x, res_y = [1,2,3], [1,2,3]

fig = plt.figure()
ax = plt.subplot2grid((2, 2), (0, 0), rowspan=2)
ax2 = plt.subplot2grid((2, 2), (0, 1))
ax3 = plt.subplot2grid((2,2), (1,1))

rects = ax3.bar(res_x, res_y, color='b')
im1 = ax.imshow([[1,2],[2,3]], vmin=0)
im2 = ax2.imshow([[1,2],[2,3]], vmin=0)

def animate(i):

    im1.set_data([[1,2],[(i/100.),3]])
    im2.set_data([[(i/100.),2],[2.4,3]])

    for rect, yi in zip(rects, range(len(res_x))):
        rect.set_height((i/100.)*(yi+0.2))
    return [rect for rect in rects]+[im1, im2]

anim = animation.FuncAnimation(fig, animate, frames=200, interval=20, blit=True)
plt.show()

如果这回答了你的问题,你应该考虑一下。如果没有,您可以通过更新您的问题提供进一步的详细信息。如果答案是有帮助的(也可能是,如果它解决了问题),你也可以考虑投票。当然,对于您以前的问题(和)也是如此。使用此解决方案,我会得到以下错误:“AttributeError:draw\u Artister只能在缓存渲染的初始绘制之后使用”此外,这会打开条形图的绘图,但会覆盖其他两个子绘图,然而,我希望这三个都是子地块,一起看。有什么想法吗?我很抱歉没有接受前面的错误,我现在就开始。因为您没有显示完整的代码,所以不可能知道此错误来自何处。但是我在我的答案中添加了一个,这表明它按预期工作。您提供的示例允许我解决我的问题,谢谢!我有一个后续问题:我试图像这样定义条形图轴:ax=plt.axes(xlim=(0,9),ylim=(0,100)),我意识到当我用这条线运行动画时会出错。是否有其他方法可以将X轴设置为从0-9,Y轴设置为从0-100?干杯要设置现有轴的限制,请执行
ax.set\u xlim(0,9)
ax.set\u ylim(0100)
import matplotlib.pyplot as plt
import matplotlib.animation as animation

res_x, res_y = [1,2,3], [1,2,3]

fig = plt.figure()
ax = plt.subplot2grid((2, 2), (0, 0), rowspan=2)
ax2 = plt.subplot2grid((2, 2), (0, 1))
ax3 = plt.subplot2grid((2,2), (1,1))

rects = ax3.bar(res_x, res_y, color='b')
im1 = ax.imshow([[1,2],[2,3]], vmin=0)
im2 = ax2.imshow([[1,2],[2,3]], vmin=0)

def animate(i):

    im1.set_data([[1,2],[(i/100.),3]])
    im2.set_data([[(i/100.),2],[2.4,3]])

    for rect, yi in zip(rects, range(len(res_x))):
        rect.set_height((i/100.)*(yi+0.2))
    return [rect for rect in rects]+[im1, im2]

anim = animation.FuncAnimation(fig, animate, frames=200, interval=20, blit=True)
plt.show()