需要帮助使用matplotlib在tkinter中绘制图形[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

我正在编写一个程序,使用matplotlibtkinter通过GUI绘制图形。一切都按计划工作,除非我输入xy变量后,绘制的图表是精确的x = y线,除了轴上的数字按输入顺序排列。

enter image description here

这是代码:

我已经尝试过使用axismatplotlib命令,但它没有用。

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窗口初始化或小部件。我认为它会绘制一条在轴上具有均匀间隔数字的线,但事实并非如此。

python python-3.x matplotlib tkinter
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.