【发布时间】:2021-03-04 15:54:40
【问题描述】:
我有一个 Python 脚本,我在其中导入了每 x 毫秒获取的一些传感器数据。 我使用 tkinter 和 matplotlib 绘制这些值。 我还使用 Matplotlib 中的“MultiCursor”在鼠标之后的所有子图中画一条线。 我现在想要的是能够在每个子图旁边显示 y 上的值对应于光标的当前 x 值。
我进行了一些研究,不幸的是我不知道如何进行。我从 matplotlib 事件、matplotlib 轴分析了方法,但我什么也没找到。
我已经知道其中一个问题是我的数据是离散的度量而不是一组连续的值,但是由于绘图是一条连续的线,有没有办法直接从轴获取值?
下面是我目前拥有的最小代码,但没有任何关于这个特定请求的尝试。
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
w_main = tk.Tk()
w_main.geometry("1080x720")
f_leftFrame = tk.Frame(w_main)
f_leftFrame.pack(side=tk.LEFT, anchor='nw', fill=tk.BOTH)
f_graphFrame = tk.Frame(w_main)
f_graphFrame.pack(fill=tk.BOTH, expand=1)
fig = Figure(figsize=(5, 5), dpi=100)
graph = FigureCanvasTkAgg(fig, master=f_graphFrame)
graph.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=True)
time = [0, 0.150, 0.3, 0.450, 0.6, 0.750, 0.9]
record1 = [0, 5, 3, 6, 2, 8, 9]
record2 = [1, 6, 8, 5, 7, 2, 5]
record3 = [9, 7, 5, 3, 0, 0, 2]
liste = []
for i in range(3):
globals()["ax{}".format(i)] = fig.add_subplot(int("31{}".format(i+1)))
liste.append(globals()["ax{}".format(i)])
for i in range(len(liste)):
liste[i].plot(time, globals()["record{}".format(i+1)])
multi = MultiCursor(graph, liste, 'r', lw=2.0, vertOn=True)
tk.mainloop()
【问题讨论】:
-
这正是我所寻找的,如果 Matplotlib 中的 MultiCursors 可能的话,我更愿意,但无论如何。谢谢。
标签: python matplotlib tkinter events plot