У меня есть код ниже, который читает данные из CSV-файла и создает график с помощью matplotlib.Используемый CSV-файл периодически обновляется, и график обновляется, чтобы отразить это.
import matplotlib
matplotlib.use('TkAgg')
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
objects = ("a","b","c","d","e","f","g","h")
def update_graph():
fig.clear()
cols = ["a","b","c","d","e","f","g","h"]
df = pd.read_csv("C:/Users/user/Dropbox/sent_proj/live_info.csv",header=None, names=cols,encoding = "UTF-8",low_memory=False)
performance = df.values.tolist()
flat_list = [int(item) for sublist in performance for item in sublist]
a = np.array(flat_list)
y_pos = np.arange(len(objects))
mask1 = a < 0
mask2 = a >= 0
plt.axhline(0, color='black')
plt.bar(y_pos[mask1], a[mask1], align='center', color = 'r', width= 1, edgecolor = "black", linewidth = 1)
plt.bar(y_pos[mask2], a[mask2], align='center', color = 'g', width= 1, edgecolor = "black", linewidth = 1)
plt.xticks(y_pos, objects)
fig.canvas.draw()
win.after(20000, update_graph)
fig = plt.figure()
win = fig.canvas.manager.window
win.after(100, update_graph)
plt.show()
Я хотел бы добавить к этому, нажав на график и отобразив некоторые данные, к которым я смог добратьсяработать, адаптируя код, который я нашел.Проблема в том, что я больше не могу его обновить.В настоящее время я получаю сообщение об ошибке.
win = fig.canvas.manager.window
AttributeError: у объекта 'FigureManagerInterAgg' нет атрибута 'window'
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
objects = ("a","b","c","d","e","f","g","h")
def update_graph():
fig.clear()
cols = ["a", "b", "c", "d", "e", "f", "g", "h"]
df = pd.read_csv("live_info.csv", header=None, names=cols,
encoding="UTF-8", low_memory=False)
performance = df.values.tolist()
flat_list = [int(item) for sublist in performance for item in sublist]
a = np.array(flat_list)
y_pos = np.arange(len(objects))
ax2.axhline(0, color='black')
mask1 = a < 0
mask2 = a >= 0
bars = ax2.bar(y_pos[mask1], a[mask1], align='center', color = 'r', width= 1, edgecolor = "black", linewidth = 1, picker=True)
bars = ax2.bar(y_pos[mask2], a[mask2], align='center', color = 'g', width= 1, edgecolor = "black", linewidth = 1, picker=True)
plt.xticks(y_pos, objects)
for label in ax2.get_xticklabels(): # make the xtick labels pickable
label.set_picker(True)
fig.canvas.draw()
win.after(20000, update_graph)
def onpick1(event):
(on mouse click stuff)
fig, ax2 = plt.subplots(1)
win = fig.canvas.manager.window
fig.canvas.mpl_connect('pick_event', onpick1)
win.after(100, update_graph)
plt.show()
Можно ли заставить мой новый код обновляться так же, как предыдущий?и как я могу сделать это?Заранее спасибо