Python 在matplotlib中动态更新堆叠条形图
我想知道如何在matplotlib中动态更新堆叠条形图 此问题描述了如何对普通条形图(而不是堆叠条形图)执行此操作 在普通条形图中,可以通过Python 在matplotlib中动态更新堆叠条形图,python,matplotlib,bar-chart,dynamically-generated,Python,Matplotlib,Bar Chart,Dynamically Generated,我想知道如何在matplotlib中动态更新堆叠条形图 此问题描述了如何对普通条形图(而不是堆叠条形图)执行此操作 在普通条形图中,可以通过rect.set\u height(h)进行更新,假设rects=plt.bar(范围(N),x,align='center') 但在堆叠条形图中,我们还需要设置底部 p2 = plt.bar(ind, womenMeans, width, color='y', bottom=menMeans, yerr=menStd) 如何动态
rect.set\u height(h)
进行更新,假设rects=plt.bar(范围(N),x,align='center')
但在堆叠条形图中,我们还需要设置底部
p2 = plt.bar(ind, womenMeans, width, color='y',
bottom=menMeans, yerr=menStd)
如何动态设置底部?不幸的是,“矩形”对象似乎没有属性“set_bottom”。是否有其他方法来处理此问题?出于某种原因,您需要的
设置底部()
函数位于条
中返回对象的补丁
下。最简单的例子是,根据你建议的链接
import numpy as np
import matplotlib.pyplot as plt
def setup_backend(backend='TkAgg'):
import sys
del sys.modules['matplotlib.backends']
del sys.modules['matplotlib.pyplot']
import matplotlib as mpl
mpl.use(backend) # do this before importing pyplot
import matplotlib.pyplot as plt
return plt
N = 5
width = 0.35 # the width of the bars: can also be len(x) sequence
def animate():
# http://www.scipy.org/Cookbook/Matplotlib/Animations
mu, sigma = 100, 15
h = mu + sigma * np.random.randn((N*2))
p1 = plt.bar(np.arange(N), h[:N], width, color='r')
p2 = plt.bar(np.arange(N), h[N:], width, color='b', bottom=h[:N])
assert len(p1) == len(p2)
maxh = 0.
for i in range(50):
for rect1, rect2 in zip(p1.patches, p2.patches):
h = mu + sigma * np.random.randn(2)
#Keep a record of maximum value of h
maxh = max(h[0]+h[1],maxh)
rect1.set_height(h[0])
rect2.set_y(rect1.get_height())
rect2.set_height(h[1])
#Set y limits to maximum value
ax.set_ylim((0,maxh))
fig.canvas.draw()
plt = setup_backend()
fig, ax = plt.subplots(1,1)
win = fig.canvas.manager.window
win.after(10, animate)
plt.show()
请注意,我在每次迭代中都使用随机数更改高度生成,因此可以压缩两个面片阵列(否则会有点混乱)。效果很好。非常感谢。还有更新轴的方法吗?当条形图高于轴时,此时不再显示。您可以使用
ax.relim()
更新最大范围,然后使用ax.autoscale_view()
调整轴(其中ax
是轴手柄)。您可能会发现动画最终有点不稳定,最好在整个过程中设置一个常量限制(基于数据的最大期望值)。我已经更改了上面的示例,使用子图(因此您得到的是ax
),并且仅当它大于以前的最大值时才更新限制。