出於某種原因,你想要的set_bottom()
功能是從bar
返回的對象patches
下set_y
。最小例如,根據你的建議會是什麼樣子鏈接,
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()
請注意,我用隨機數每次迭代因此補丁的兩個陣列可代替拉鍊改變高度代(會得到一個有點亂,否則)。
這工作得很好。非常感謝。是否還有更新軸的方法?當鋼筋比軸線高時,它們現在不再顯示。 – Nickpick
您可以使用'ax.relim()'更新最大範圍,然後使用'ax.autoscale_view()'調整軸(其中'ax'是軸手柄)。您可能會發現動畫會變得有點生澀,並且最好始終設置一個常量限制(根據您的數據預期的最大值)。我已經改變了上面的例子來使用subplots(所以你得到了'ax'),並且只有在它比以前的最大值更大時才更新限制。 –