在Tkinter窗口重采样时序数据绘图时遇KeyError问题求助
解决Tkinter中Matplotlib绘制重采样时序数据的KeyError问题
错误原因
你把Test Time列转成Datetime类型后设为了DataFrame的索引,还执行了dp.drop(columns=['Test Time'],inplace=True)删掉了原列。重采样得到的dp2里根本没有Test Time这个列,所以调用dp2['Test Time']自然会抛出KeyError。此时dp2的索引就是你需要的时间序列。
修复方案
有两种简单的解决方式:
方案1:直接使用索引(推荐,更高效)
修改绘制散点图的代码,用dp2.index作为x轴数据:
ax3.scatter(dp2.index, dp2['Temperature'], color='g')
方案2:将索引转为普通列
如果习惯用列名访问数据,可以在重采样后把索引转回列:
dp2=dp.resample('5min').mean().reset_index() # 之后就可以正常调用dp2['Test Time'] ax3.scatter(dp2['Test Time'], dp2['Temperature'], color='g')
完整修复后的代码(方案1)
import pandas as pd import tkinter as tk from matplotlib.figure import Figure from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg dp = pd.read_excel('demo11.xlsx') dp.index=pd.to_datetime(dp['Test Time']) dp.drop(columns=['Test Time'],inplace=True) dp2=dp.resample('5min').mean() root = tk.Tk() figure3 = Figure(figsize=(5, 4), dpi=100) ax3 = figure3.add_subplot(111) # 改用索引作为x轴数据 ax3.scatter(dp2.index, dp2['Temperature'], color='g') scatter3 = FigureCanvasTkAgg(figure3, root) scatter3.get_tk_widget().pack(side=tk.LEFT, fill=tk.BOTH) ax3.legend(['Temperature']) ax3.set_xlabel('Test Time') ax3.set_title('Test Time Vs. Temperature') # 自动旋转x轴标签,彻底解决重叠问题 ax3.tick_params(axis='x', rotation=45) root.mainloop()
额外补充:添加ax3.tick_params(axis='x', rotation=45)可以自动旋转x轴的时间标签,刚好满足你最初避免X轴数据重叠的需求。
内容的提问来源于stack exchange,提问作者saran
相关产品推荐
相关产品推荐

