gpt4 book ai didi

python - 从 for 循环中更新的字典制作可滚动的绘图

转载 作者:太空宇宙 更新时间:2023-11-03 21:21:55 26 4
gpt4 key购买 nike

我有一个通过 for 循环更新的字典,我试图在图中绘制键值对,该图中随着键值对的数量不断更新而移动或滑动,并且该图仅显示来自的 50 个当前值字典。

到目前为止我已经做了:

for k,v in plot.items():

plt.barh(k,v , color='blue')
plt.pause(0.3)


plt.show()

问题在于值不断附加并且绘图不断增长。有什么方法可以显示字典中的最后 50 k,v 对并继续更新绘图。我也尝试过一个功能:

def live_plotter(x_vec,y1_data,line1,identifier='',pause_time=0.1):
if line1==[]:
# this is the call to matplotlib that allows dynamic plotting
plt.ion()
#fig = plt.figure(figsize=(13,6))
#ax = fig.add_subplot(111)
# create a variable for the line so we can later update it
line1, = plt.plot(x_vec,y1_data,'-o', alpha=0.8)
#update plot label/title
plt.ylabel('Cross-correlation')
plt.title('Title: {}'.format(identifier))


line1.set_data(x_vec, y1_data)

plt.pause(pause_time)

return line1

但这也不会更新绘图,而只是像上面的代码一样附加到绘图中。

我也尝试过动画功能:

fig = plt.figure()
def animate():
for k, v in plot:
print(k, v)
plt.barh(k, v, color='blue')
plt.pause(0.3)

ani = matplotlib.animation.FuncAnimation(fig, animate, interval=1000)

plt.show()

可重现的示例:

import matplotlib.pyplot as plt
import matplotlib.animation

plot_base={'00002200': 986.11152642551519,
'00002201': 989.90915858383369,
'00002202': 992.87095144990781,
'00002203': 994.89971071876084,
'00002204': 992.92424216660561,
'00002205': 993.19845750930426,
'00002206': 988.88001766153957,
'00002207': 988.95062195981848,
'00002208': 993.17138084871465,
'00002209': 993.9863425202193,
'00002210': 993.43551440410283,
'00002211': 993.04540624076844,
'00002212': 991.40048097057559,
'00002213': 993.16124311517319,
'00002214': 994.06785011666204,
'00002215': 985.24294182260996,
'00002216': 990.5369409623512,
'00002217': 991.83512034302737,
'00002218': 993.43756392913269,
'00002219': 989.77919409784511,
'00002220': 988.09683378239572,
'00002221': 992.19961090836773,
'00002222': 992.69477342507912,
'00002223': 992.37890673842412,
'00002224': 991.55520651752556,
'00002225': 992.15414070360941,
'00002226': 991.49292821478309,
'00002227': 994.75013161999084,
'00002228': 991.54858727670728,
'00002229': 993.22846583401292,
'00002230': 993.88719133150084,
'00002231': 992.89934842358855,
'00002232': 991.10582582918869,
'00002233': 993.24750746833467,
'00002234': 992.6478137931806,
'00002235': 991.2614284514957,
'00002236': 994.38800336488725}

plot={}

for k,v in plot_base.items():
plot.update({k: v})


for k,v in plot.items():
bar, = plt.bar(k, v, color='blue')
plt.pause(0.3)
plt.plot()


'''
def animate(i):
bars = []
for k, v in plot.items():
bar, = plt.bar(k, v, color='blue')
bars.append(bar)
return bars


fig=plt.figure(figsize=(12 ,7))

ani = matplotlib.animation.FuncAnimation(fig, animate, interval=1000, blit=True)

plt.show()
'''

当我们运行这段代码时,字典中的值不断附加到x轴,这就是为什么我想让它滚动(自动滚动),三重引用的代码显示动画部分,这使得整个图表立即出现。

最佳答案

我认为我不理解这里使用的数据结构,所以这里重点关注动画部分。假设您有一个函数 store.get_last_20_values,可以从中获取要绘制的数据。那么动画将如下所示:

import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import numpy as np

fig, ax = plt.subplots()

def animate(i):
cat, val = store.get_last_20_values()
ax.clear()
ax.barh(cat, val)

ani = FuncAnimation(fig, animate, interval=1000)
plt.show()

为了完整起见,这里是该函数的样子,以使上面的代码可运行。

class Store():
x = []
y = []

def update(self):
n = np.random.randint(0,5)
x = np.random.randint(100000,999999, size=n).astype(str)
y = np.random.randint(50,999, size=n)
self.x.extend(x)
self.y.extend(y)
self.x = self.x[-20:]
self.y = self.y[-20:]

def get_last_20_values(self):
# Some function to return 20 values. Need to adapt to custom needs.
self.update()
return self.x, self.y

store = Store()

关于python - 从 for 循环中更新的字典制作可滚动的绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54170868/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com