Python新手如何为matplotlib温度折线图添加下拉菜单(数据来自CSV)
实现方案
你可以使用matplotlib内置的Dropdown控件实现下拉菜单需求,以下是修改后的完整代码,默认实现下拉选择展示不同温度序列的功能,如果你需要按时段筛选,修改回调函数内的逻辑即可:
import csv import matplotlib.pyplot as plt from matplotlib.widgets import Dropdown # 导入下拉菜单控件 class grafice_statice(): def run(self): # 数据读取部分保持不变 x=[] y=[] z=[] w=[] with open('temperatura.csv', 'r') as csvfile: date = csv.reader(csvfile, delimiter=',') for row in date: try: y.append(float(row[0])) z.append(float(row[1])) w.append(float(row[2])) x.append(row[3]) except Exception as e: pass # 调整画布布局,预留下拉菜单的位置 fig, ax = plt.subplots(figsize=(10,6)) plt.subplots_adjust(top=0.9) # 顶部留出空间放下拉菜单 # 初始默认展示全部温度曲线 line1, = ax.plot(x,z, color='g', linestyle='dotted', marker='o', label='Temp 2(°C)') line2, = ax.plot(x,y, color='m', linestyle='solid', marker='P', label='Temp 1(°C)') line3, = ax.plot(x,w, color='r', linestyle='dashdot', marker='D', label='Temp 3(°C)') ax.set_xlabel('Timpul') ax.set_ylabel('Temperatura(°C)') ax.set_title('Temperatura in functie de timp', fontsize = 18) ax.legend() ax.set_xticks([0,50,99]) ax.set_ylim((-5,5)) # 定义下拉菜单的选项和回调函数 options = ['全部温度', 'Temp 1', 'Temp 2', 'Temp 3'] # 创建下拉菜单的位置区域,参数依次为:左、下、宽度、高度 ax_drop = plt.axes([0.1, 0.93, 0.2, 0.03]) dropdown = Dropdown(ax_drop, '选择显示:', options) def update_plot(selected_option): # 切换曲线显示状态 line1.set_visible(selected_option in ['全部温度', 'Temp 2']) line2.set_visible(selected_option in ['全部温度', 'Temp 1']) line3.set_visible(selected_option in ['全部温度', 'Temp 3']) # 刷新画布 fig.canvas.draw_idle() # 绑定下拉菜单的选择事件到回调函数 dropdown.on_changed(update_plot) plt.show() if __name__ == '__main__': grafice_stat=grafice_statice() grafice_stat.run()
注意事项
- 下拉菜单的位置可以通过修改
plt.axes([0.1, 0.93, 0.2, 0.03])里的四个参数调整,四个值分别对应菜单的左边缘位置、下边缘位置、宽度、高度 - 如果需要实现按时段筛选的功能,只需要修改
update_plot函数内的逻辑,将不同选项对应到x轴的不同切片范围即可 - 原始代码中类的实例化逻辑缩进错误,已经修复,避免运行时报错
内容的提问来源于stack exchange,提问作者Grg
相关产品推荐
相关产品推荐

