现有多个列表,画折线图,刚开始我不知道显示哪一条,为了方便使用,我在显示的时候加上一个可以选择具体显示哪一条折线的功能,不要用户输入选择,用户通过点击选择对应的折线名字,而且用户可以根据自己选择选择显示一条或者多条,完整代码
时间: 2023-10-10 21:05:51 浏览: 42
这里提供一个基于 Python 和 Matplotlib 库的示例代码,可以实现选择性显示多条折线的功能:
```python
import matplotlib.pyplot as plt
# 定义多个数据列表,用于画折线图
x = [1, 2, 3, 4, 5, 6]
y1 = [5, 3, 8, 4, 6, 2]
y2 = [3, 2, 5, 7, 2, 1]
y3 = [6, 4, 2, 5, 8, 3]
# 定义折线名字和对应的数据列表
lines = {'y1': y1, 'y2': y2, 'y3': y3}
# 定义默认显示的折线名字列表
show_lines = ['y1', 'y2']
# 定义点击事件的回调函数
def on_line_select(event):
# 获取被点击的折线名字
line_name = event.artist.get_label()
# 判断是否已经显示该折线
if line_name in show_lines:
# 如果已经显示,则从显示列表中移除
show_lines.remove(line_name)
else:
# 如果未显示,则添加到显示列表中
show_lines.append(line_name)
# 重新绘制图形
redraw()
# 定义绘制图形的函数
def redraw():
# 清空原有的图形
plt.clf()
# 遍历显示列表,绘制对应的折线
for line_name in show_lines:
plt.plot(x, lines[line_name], label=line_name)
# 设置图例
plt.legend()
# 设置标题和坐标轴标签
plt.title('Multiple Lines Chart')
plt.xlabel('X Axis')
plt.ylabel('Y Axis')
# 设置点击事件的回调函数
plt.gcf().canvas.mpl_connect('pick_event', on_line_select)
# 显示图形
plt.show()
# 调用绘制函数,显示默认显示的折线
redraw()
```
该代码中,首先定义了多个数据列表和折线名字,然后定义了默认显示的折线名字列表。在绘制图形时,遍历显示列表,只绘制列表中的折线。同时,通过设置 `pick_event` 事件的回调函数 `on_line_select`,实现了点击折线选择显示或隐藏的功能。在回调函数中,通过判断折线名字是否已经在显示列表中,来决定是否添加或移除该折线。最后,重新绘制图形并显示。
阅读全文