我正在使用matplotlib
和tkinter
编写程序来通过GUI绘制图形。一切都按计划进行,除了我输入了x
和y
变量之后,绘制的图形是精确的x = y线,除了轴上的数字按输入顺序而定。>
代码如下:
我已经尝试使用axis
中的matplotlib
命令,但是没有用。
x=[]
y=[]
enterx = ttk.Entry(self)
enterx.pack()
enterx.insert(0,"X")
entery = ttk.Entry(self)
entery.pack()
entery.insert(0,"Y")
def creategraph(self,parent,x,y,enterx,entery):
f = Figure(figsize=(5,5), dpi=100)
a = f.add_subplot(111)
textx = enterx.get()
texty = entery.get()
x=textx.split(",")
y=texty.split(",")
a.plot(x,y)
canvas = FigureCanvasTkAgg(f,self)
canvas.draw()
toolbar = NavigationToolbar2Tk(canvas,self)
toolbar.update()
canvas._tkcanvas.pack(side=tk.TOP,fill=tk.BOTH, expand=True)
canvas.get_tk_widget().pack(side=tk.BOTTOM,fill=tk.BOTH, expand=True)
该代码不包含tkinter
窗口初始化或窗口小部件。我以为它会在轴上画一条均匀间隔数字的线,但事实并非如此。
答案 0 :(得分:1)
问题似乎是您要绘制的值是字符串,因此顺序不是基于数字的。以下是一种解决方案:使用int
将字符串值转换为map
(整数)类型。修改后的代码行带有注释。
def creategraph(self,parent,x,y,enterx,entery):
f = Figure(figsize=(5,5), dpi=100)
a = f.add_subplot(111)
textx = enterx.get()
texty = entery.get()
x=list(map(int, textx.split(","))) # <---- Convert strings to int
y=list(map(int, texty.split(","))) # <---- Convert strings to int
a.plot(x,y)