需要帮助使用matplotlib在tkinter中绘制图形

时间:2019-01-16 20:02:30

标签: python python-3.x matplotlib tkinter

我正在使用matplotlibtkinter编写程序来通过GUI绘制图形。一切都按计划进行,除了我输入了xy变量之后,绘制的图形是精确的x = y线,除了轴上的数字按输入顺序而定。

enter image description here

代码如下:

我已经尝试使用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窗口初始化或窗口小部件。我以为它会在轴上画一条均匀间隔数字的线,但事实并非如此。

1 个答案:

答案 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)