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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了需要帮助使用matplotlib在tkinter中绘制图形[重复]相关的知识,希望对你有一定的参考价值。

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

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

答案

问题似乎是您绘制的值是字符串,因此顺序不是基于数字。以下是一个解决方案:使用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)

以上是关于需要帮助使用matplotlib在tkinter中绘制图形[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 tkinter 中运行 matplotlib

matplotlib - Blender python中没有名为tkinter的模块

matplotlib 在 tkinter 画布中的缩放功能

使用 matplotlib 在 Tkinter 中绘制数据 - 在列表之间切换

MatplotLib (TKinter) + OpenCV 在 Python 3 中崩溃

Matplotlib在tkinter中起作用