使用 matplotlib.pyplot 更新条形图
Posted
技术标签:
【中文标题】使用 matplotlib.pyplot 更新条形图【英文标题】:updating bar chart with matplotlob.pyplot 【发布时间】:2022-01-12 22:27:04 【问题描述】:我正在尝试使用新数据更新条形图。 我不能使用 FuncAnimation,所以我想使用 for 循环。 我正在通过 Jupyter 使用 Python
我做错了什么?谢谢
import matplotlib.pyplot as plt
data1 = [6,7,5,6,8,6,9,7]
data2 = [2,3,5,6,7,8,4,2]
data3 = [4,2,1,3,5,6,6,7]
data4 = [1,6,5,4,3,2,11,9]
data5 = [6,7,5,6,8,6,9,7]
data6 = [2,3,5,6,7,8,4,2]
data7 = [4,2,1,3,5,6,6,7]
data8 = [1,6,5,4,1,2,11,9]
data = [data1,data2,data3,data4,data5,data6,data7,data8]
name = "area1"
fig = plt.figure(figsize=(14,8))
fig.canvas.manager.set_window_title("area_1")
plt.ion()
ax = plt.axes()
ax.set_facecolor("#BCECE0")
plt.title(name, color="#F652A0")
rects = plt.bar(range(len(data)), 0, tick_label=range(len(data)), color="#4C5270")
plt.legend()
plt.show()
for i in range(8):
for rect,h in zip(rects,data[i]):
rect.set_height(h)
fig.canvas.draw()
plt.pause(1)
【问题讨论】:
【参考方案1】:我建议改编here 中的一些想法。
例如,在下面的代码中,我通过使用 rect.set_height(h)
传递每个条形的值来更新 8 帧中的每一帧的条形图。见以下代码:
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
%matplotlib notebook
data1 = [6,7,5,6,8,6,9,7]
data2 = [2,3,5,6,7,8,4,2]
data3 = [4,2,1,3,5,6,6,7]
data4 = [1,6,5,4,3,2,11,9]
data5 = [6,7,5,6,8,6,9,7]
data6 = [2,3,5,6,7,8,4,2]
data7 = [4,2,1,3,5,6,6,7]
data8 = [1,6,5,4,1,2,11,9]
data = [data1,data2,data3,data4,data5,data6,data7,data8]
fig,ax = plt.subplots()
name = "area1"
ax.set_facecolor("#BCECE0")
plt.title(name, color="#F652A0")
N_bars=len(data[0])
rects = plt.bar(range(N_bars), data[0], align ='center',color="#4C5270")
plt.ylim([0,np.amax(data)])
for i in range(N_bars):
dat=data[i]
for rect, h in zip(rects, dat):
rect.set_height(h)
fig.canvas.draw()
plt.savefig('fig-'+str(i)+'.png')
plt.pause(1)
plt.show()
输出给出:
【讨论】:
非常感谢。现在的问题是它适用于 Pycharm,但不适用于 Jupyter。我在 Jupiter 中运行它只是在下面添加未更新的新图表 您需要添加%matplotlib notebook
才能在 jupyter notebook 上工作。请参阅我的答案的编辑。以上是关于使用 matplotlib.pyplot 更新条形图的主要内容,如果未能解决你的问题,请参考以下文章
如何将货币格式添加到 matplotlib.pyplot.text? [复制]