所以我试图编写一个小的GUI,允许最终用户在Excel文件中绘制任意2列的X与Y。我的代码是:
import pandas as pd
import matplotlib.pyplot as plt
import tkinter as tk
my_base=pd.read_excel('my_base.xlsx', 'the_tab', index_col=None, na_values = ['NA'])
my_base_header = list(my_base.columns.values)
my_base['Generated Date'] = pd.to_datetime(my_base['Generated Date'])
main_win = tk.Tk()
def plot_graph():
print(option1.get())
print(option2.get())
my_base.plot(x = option1.get(), y = option2.get(), style = 'x')
plt.show()
option1 = tk.StringVar(main_win)
option1.set(my_base_header[0])
option2 = tk.StringVar(main_win)
option2.set(my_base_header[0])
opt1 = tk.OptionMenu(main_win, option1, *my_base_header)
opt1.pack()
opt2 = tk.OptionMenu(main_win, option2, *my_base_header)
opt2.pack()
runbtn = tk.Button(main_win, text = 'Plot', command = plot_graph)
runbtn.pack()
main_win.mainloop()
如果我直接把数据帧头放进去,我可以让程序绘图,如下所示:
^{pr2}$但是当我在这里使用x = option1.get()
时,我得到了这个回溯
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
my_base.plot(x= x_ax, y = y_ax, style = 'x')
File "C:\Python34\lib\site-packages\pandas\tools\plotting.py", line 2485, in plot_frame
**kwds)
File "C:\Python34\lib\site-packages\pandas\tools\plotting.py", line 2325, in _plot
plot_obj.generate()
File "C:\Python34\lib\site-packages\pandas\tools\plotting.py", line 921, in generate
self._compute_plot_data()
File "C:\Python34\lib\site-packages\pandas\tools\plotting.py", line 997, in _compute_plot_data
'plot'.format(numeric_data.__class__.__name__))
TypeError: Empty 'Series': no numeric data to plot
正如错误所说:您试图绘制的数据是非数字的,所以它可能是一个字符串,或者从它的外观来看,可能是一个日期时间。如果您包含数据以及哪个列给出了这个错误,我们就可以指出问题所在。在
如果是datetime,则可能需要将其转换为pandas时间戳类型,例如:
你的代码似乎对我有用。我使用了这个演示数据集: http://www.contextures.com/xlSampleData01.html
如果我试图绘制一些非数字的东西,例如'Region'或'Rep',它会给出与您相同的错误(没有要绘制的数字数据)。如果我画出“单位成本”与“总成本”,或者两个数字数据集的任何其他组合,都可以。在
^{pr2}$相关问题 更多 >
编程相关推荐