[英]How to update graph in canvas?
我正在制作一个 GUI,它正在可视化来自 a 的 json 数据。 我目前遇到的问题是我无法在 canvas 中更新图表,它仅在我按下最大/最小按钮时更新: . 当我按下一个新文件时,有没有办法更新图形? 图形用户界面的图片:
绘制图表的部分代码:
##### Canvas ####
figure = plt.figure()
canvas = FigureCanvasTkAgg(figure, master=inspect_data)
canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=True)
###### file gets selected #####
def items_selected(d):
plt.clf()
selected_indices = vores_listebox.curselection()
selected_json = ",".join([vores_listebox.get(i) for i in selected_indices])
full_file_path = path_us + selected_json
open_json = js.load(open(full_file_path, "r"))
time = [open_json['XML_Data']
['Wsk3Vectors']['X_Axis']['Values']['float']]
rpm = [open_json['XML_Data']['Wsk3Vectors']
['Y_AxesList']['AxisData'][0]['Values']['float']]
torque = [open_json['XML_Data']['Wsk3Vectors']
['Y_AxesList']['AxisData'][1]['Values']['float']]
current = [open_json['XML_Data']['Wsk3Vectors']
['Y_AxesList']['AxisData'][2]['Values']['float']]
angle = [open_json['XML_Data']['Wsk3Vectors']
['Y_AxesList']['AxisData'][3]['Values']['float']]
depth = [open_json['XML_Data']['Wsk3Vectors']
['Y_AxesList']['AxisData'][4]['Values']['float']]
###### Using Matlib.pyplot to plot 5 graphs ######
plt.rcParams["figure.figsize"] = (7, 10)
plt.subplot(5, 1, 1)
plt.scatter(time, rpm, c="b", linewidths=2,
marker=",", edgecolor="b", s=1, alpha=0.5)
plt.title(selected_json)
plt.gca().axes.xaxis.set_ticklabels([])
plt.ylabel("RPM")
plt.grid()
plt.subplot(5, 1, 2)
plt.scatter(time, torque, c="g", linewidths=1,
marker=",", edgecolor="g", s=1, alpha=0.3)
plt.gca().axes.xaxis.set_ticklabels([])
plt.ylabel("Torque [Nm]")
plt.grid()
plt.subplot(5, 1, 3)
plt.scatter(time, current, c="r", linewidths=2,
marker=",", edgecolor="r", s=1, alpha=0.5)
plt.gca().axes.xaxis.set_ticklabels([])
plt.ylabel("Current [Amps]")
plt.grid()
plt.subplot(5, 1, 4)
plt.scatter(time, angle, c="m", linewidths=2,
marker=",", edgecolor="m", s=1, alpha=0.5)
plt.gca().axes.xaxis.set_ticklabels([])
plt.ylabel("Angle [RAD]")
plt.grid()
plt.subplot(5, 1, 5)
plt.scatter(time, depth, c="c", linewidths=2,
marker=",", edgecolor="c", s=1, alpha=0.5)
plt.xlabel("Time [ms]")
plt.ylabel("Depth [mm]")
plt.grid()
vores_listebox.bind('<<ListboxSelect>>', items_selected)
我尝试了 root.update()、Canvas.update() 和许多其他命令,但没有任何效果。 任何帮助表示赞赏!
您是否尝试过调用canvas.draw_idle()
或canvas.draw()
在哪里/何时要刷新 canvas 小部件?
def items_selected(d):
plt.clf()
selected_indices = vores_listebox.curselection()
selected_json = ",".join([vores_listebox.get(i) for i in selected_indices])
full_file_path = path_us + selected_json
open_json = js.load(open(full_file_path, "r"))
time = [open_json['XML_Data']
['Wsk3Vectors']['X_Axis']['Values']['float']]
rpm = [open_json['XML_Data']['Wsk3Vectors']
['Y_AxesList']['AxisData'][0]['Values']['float']]
torque = [open_json['XML_Data']['Wsk3Vectors']
['Y_AxesList']['AxisData'][1]['Values']['float']]
current = [open_json['XML_Data']['Wsk3Vectors']
['Y_AxesList']['AxisData'][2]['Values']['float']]
angle = [open_json['XML_Data']['Wsk3Vectors']
['Y_AxesList']['AxisData'][3]['Values']['float']]
depth = [open_json['XML_Data']['Wsk3Vectors']
['Y_AxesList']['AxisData'][4]['Values']['float']]
canvas.draw_idle() # refresh the canvas with new data
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.