现有多个列表,我想要画他们的折线图,在画图时刚开始显示空白的图,在侧边有一个菜单栏或者一个选项框,用户可以用鼠标点击选择显示哪一条或者哪几条折线,完整代码
时间: 2024-02-17 11:03:08 浏览: 94
好的,您可以使用 Python 的 Matplotlib 库来绘制折线图,并且使用 Tkinter 库来创建用户界面。以下是一个完整的示例代码:
```python
import tkinter as tk
from tkinter import ttk
import matplotlib.pyplot as plt
# 数据示例
data = {
'list1': [1, 3, 2, 4, 6, 5],
'list2': [5, 4, 6, 3, 2, 1],
'list3': [2, 4, 3, 5, 6, 1]
}
# 创建主窗口
root = tk.Tk()
root.title('折线图示例')
# 创建画布
fig = plt.figure(figsize=(6, 4), dpi=100)
canvas = plt.gcf().canvas
canvas.master = root
canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)
# 创建菜单栏
frame = tk.Frame(root)
frame.pack(side=tk.LEFT, fill=tk.Y)
# 创建选项框
var1 = tk.BooleanVar()
var2 = tk.BooleanVar()
var3 = tk.BooleanVar()
check1 = ttk.Checkbutton(frame, text='列表1', variable=var1)
check2 = ttk.Checkbutton(frame, text='列表2', variable=var2)
check3 = ttk.Checkbutton(frame, text='列表3', variable=var3)
check1.pack(side=tk.TOP, fill=tk.X)
check2.pack(side=tk.TOP, fill=tk.X)
check3.pack(side=tk.TOP, fill=tk.X)
# 绘制折线图
lines = []
for name, values in data.items():
lines.append(plt.plot(values, label=name)[0])
plt.legend()
# 更新选项框状态
def update_checkboxes():
var1.set(lines[0].get_visible())
var2.set(lines[1].get_visible())
var3.set(lines[2].get_visible())
# 更新折线图
def update_plot():
for i, line in enumerate(lines):
line.set_visible([var1.get(), var2.get(), var3.get()][i])
canvas.draw()
# 绑定事件
check1.bind('<Button-1>', lambda e: update_plot())
check2.bind('<Button-1>', lambda e: update_plot())
check3.bind('<Button-1>', lambda e: update_plot())
update_checkboxes()
update_plot()
# 运行主循环
root.mainloop()
```
运行后会弹出一个窗口,包含了一个空白的折线图和一个菜单栏和一个选项框。用户可以使用选项框来选择显示哪些折线,然后折线图会相应更新。
阅读全文