如何在matplotlib中已绘制的线上添加一条线?

狂风

我有一个tkinter窗口,在第一页上,我已经嵌入了matplotlib图,也使用tkinter条目小部件来获取用户值。我可以从用户值中提取内容,但是我想保留已经绘制的内容。同时删除最近绘制的线条。

我对OOP还是陌生的,因此通过教程和这里的帮助我迷迷糊糊了。任何意见或任何形式的帮助将不胜感激。

import matplotlib
matplotlib.use('TkAgg')
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
from matplotlib import style
import tkinter as tk    
from tkinter import ttk
from tkinter import *
    
LARGE_FONT = ('Verdana',12)
style.use('ggplot')

from matplotlib import pyplot as plt    

class Stress(tk.Tk):
    def __init__(self):

        tk.Tk.__init__(self)
        
        tk.Tk.iconbitmap(self,default='icon1.ico')
        tk.Tk.wm_title(self,'Stress Members')
        
        container = tk.Frame(self)
        container.pack(side='top', fill='both', expand='False')
        container.grid_rowconfigure(0,weight=1)
        container.grid_columnconfigure(0,weight=1)

        self.frames ={}
        frame= PageOne(container,self)
        self.frames[PageOne] = frame
        frame.grid(row=0, column=0, sticky='nsew')


    def show_frame(self,cont):

        frame=self.frames[cont]
        frame.tkraise()
    

class PageOne(tk.Frame):
    
    def __init__(self,parent,controller):
        tk.Frame.__init__(self,parent)
        label = tk.Label(self,text='Experiment', font = LARGE_FONT)
        label.pack(pady=10,padx=10)

        
        self.adding_widgets()

        button2= ttk.Button(self,text='Validate', command=self.draw)
        button2.pack()

        button3= ttk.Button(self,text='Erase', command=self.dlet)
        button3.pack()
            
        
        self.f1= Figure(figsize=(5,5),dpi=100)
        self.b=self.f1.add_subplot(1,1,1)
        self.canvas = FigureCanvasTkAgg(self.f1, self)
        self.canvas.draw()
        self.canvas.get_tk_widget().pack(side=tk.TOP,fill=tk.BOTH,expand=True)
        
        self.line, = self.b.plot(range(5)) ## problem here as well, want empty/blank page but have to do this to make it work
                                            ## dont know how to declare a blank empty page
            

    def adding_widgets(self,*args):
        labfram=ttk.LabelFrame(self,width=100,height=100,text='Enter Member Coordinates')
        labfram.pack()
        

        l1=ttk.Label(labfram,text='x0')
        l1.pack(side='left')
        self.e1=Entry(labfram,width=10,)
        self.e1.pack(side='left')


        l2=ttk.Label(labfram,text='y0')
        l2.pack(side='left')
        self.e2=Entry(labfram,width=10)
        self.e2.pack(side='left')


        l3=ttk.Label(labfram,text='x1')
        l3.pack(side='left')
        self.e3=Entry(labfram,width=10)
        self.e3.pack(side='left')


        l4=ttk.Label(labfram,text='y1')
        l4.pack(side='left')
        self.e4=Entry(labfram,width=10)
        self.e4.pack(side='left')
        
            
    def draw(self):
        
        print("x0 %s\ny0 %s\nx1 %s\ny1 %s" % (self.e1.get(), self.e2.get(),self.e3.get(),self.e4.get()))
        self.line.set_xdata([float(self.e1.get()), float(self.e3.get())])
        self.line.set_ydata([float(self.e2.get()),float(self.e4.get())])
        self.canvas.draw()

        ## Above code draws a line but I want to keep it so user can draw one line after the other 
    
    def dlet(self):
        
        # want to delete the most recent line drawn here 

        return None

    

app = Stress()
app.mainloop()
狂风

通过研究和测试,我能够解决ike现在可以画一条线的问题,以及如何删除最新的线

import matplotlib
matplotlib.use('TkAgg')
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
from matplotlib import style
import tkinter as tk    
from tkinter import ttk
from tkinter import *
    
LARGE_FONT = ('Verdana',12)
style.use('ggplot')

from matplotlib import pyplot as plt    

class Stress(tk.Tk):
    def __init__(self):

        tk.Tk.__init__(self)
        
        tk.Tk.iconbitmap(self,default='icon1.ico')
        tk.Tk.wm_title(self,'Stress Members')
        
        container = tk.Frame(self)
        container.pack(side='top', fill='both', expand='False')
        container.grid_rowconfigure(0,weight=1)
        container.grid_columnconfigure(0,weight=1)

        self.frames ={}
        frame= PageOne(container,self)
        self.frames[PageOne] = frame
        frame.grid(row=0, column=0, sticky='nsew')


    def show_frame(self,cont):

        frame=self.frames[cont]
        frame.tkraise()
    

class PageOne(tk.Frame):
    
    def __init__(self,parent,controller):
        tk.Frame.__init__(self,parent)
        label = tk.Label(self,text='Experiment', font = LARGE_FONT)
        label.pack(pady=10,padx=10)

        
        self.adding_widgets()

        button2= ttk.Button(self,text='Validate', command=self.draw)
        button2.pack()

        button3= ttk.Button(self,text='Erase', command=self.dlet)
        button3.pack()

        self.lines_pts=[] ## list to add data points      
        
        self.f1= Figure(figsize=(5,5),dpi=100)
        self.b=self.f1.add_subplot(1,1,1)
        self.b.set_xlim([0,10])  ## x axis limits
        self.b.set_ylim([0,10])  ## y axis limits 
        self.canvas = FigureCanvasTkAgg(self.f1, self)
        self.canvas.draw()
        self.canvas.get_tk_widget().pack(side=tk.TOP,fill=tk.BOTH,expand=True)
        
        self.lines = [] ## an emplt list to append plots 

    def adding_widgets(self,*args):
        labfram=ttk.LabelFrame(self,width=100,height=100,text='Enter Member Coordinates')
        labfram.pack()
        

        l1=ttk.Label(labfram,text='x0')
        l1.pack(side='left')
        self.x0=Entry(labfram,width=10,)
        self.x0.pack(side='left')


        l2=ttk.Label(labfram,text='y0')
        l2.pack(side='left')
        self.y0=Entry(labfram,width=10)
        self.y0.pack(side='left')


        l3=ttk.Label(labfram,text='x1')
        l3.pack(side='left')
        self.x1=Entry(labfram,width=10)
        self.x1.pack(side='left')


        l4=ttk.Label(labfram,text='y1')
        l4.pack(side='left')
        self.y1=Entry(labfram,width=10)
        self.y1.pack(side='left')
        
            
    def draw(self):
        
        p0 = float(self.x0.get()), float(self.y0.get())
        p1 = float(self.x1.get()), float(self.y1.get())
        self.lines_pts.append((p0,p1))

        for p0,p1 in self.lines_pts:
            x0, y0, x1, y1 = *p0, *p1
            X = x0,x1
            Y = y0,y1
        self.lines.append(self.b.plot(X,Y)) ## this plots the line and appends in a list of lines 
        self.canvas.draw() 

        print(self.b.lines) # gives line object and is a matplotlib thing

    def dlet(self):
        self.b.lines.remove(self.b.lines[-1])
        self.canvas.draw()   

    

app = Stress()
app.mainloop()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在matplotlib中的熊猫条形图上添加一条线?

来自分类Dev

如何在matplotlib中的熊猫条形图上添加一条线?

来自分类Dev

在Corona SDK中,如何在绘制另一条线时使一条线消失?

来自分类Dev

在Corona SDK中,如何在绘制另一条线时使一条线消失?

来自分类Dev

如何在R中以不同的颜色和形状绘制一条线?

来自分类Dev

如何在JavaFX ScatterChart中从点到X轴绘制一条线?

来自分类Dev

如何在图表js中绘制一条线到最高数据点?

来自分类Dev

如何在Blazor中划一条线?

来自分类Dev

如何在一条线上加上短环?

来自分类Dev

在matplotlib中的预测和ground_truth点之间绘制一条线

来自分类Dev

如何绘制一条线以匹配 div 与 JQuery?

来自分类Dev

如何从 StarUML 中的一条线上删除中点

来自分类Dev

在librocket中绘制一条线(html)

来自分类Dev

如何在iOS / Swift中基于当前位置的方位/航向值绘制一条线?

来自分类Dev

如何在python中从2D数组的不同行获取的点之间绘制一条线?

来自分类Dev

如何在条形图上正确绘制一条线?

来自分类Dev

如何在uiTableViewCell的uiTextField下绘制一条线?

来自分类Dev

如何在postgis中检查两个点是否在同一条线上

来自分类Dev

如何用matplotlib画一条线?

来自分类Dev

在JavaFX图表中添加一条线

来自分类Dev

如何在D3中的水平条形图上的X轴上添加一条线

来自分类Dev

如何在D3中的水平条形图上的X轴上添加一条线

来自分类Dev

OpenGL:在另一条线上画一条线

来自分类Dev

如何在画布上画一条线?

来自分类Dev

如何在Cygwin中选择一条线

来自分类Dev

如何在条形图的顶部添加一条线?

来自分类Dev

如何在条形图的顶部添加一条线?

来自分类Dev

如何在LiveCharts中添加每点工具提示?同一条线上的点如何具有不同的颜色?

来自分类Dev

如何在LiveCharts中添加每点工具提示?同一条线上的点如何具有不同的颜色?

Related 相关文章

  1. 1

    如何在matplotlib中的熊猫条形图上添加一条线?

  2. 2

    如何在matplotlib中的熊猫条形图上添加一条线?

  3. 3

    在Corona SDK中,如何在绘制另一条线时使一条线消失?

  4. 4

    在Corona SDK中,如何在绘制另一条线时使一条线消失?

  5. 5

    如何在R中以不同的颜色和形状绘制一条线?

  6. 6

    如何在JavaFX ScatterChart中从点到X轴绘制一条线?

  7. 7

    如何在图表js中绘制一条线到最高数据点?

  8. 8

    如何在Blazor中划一条线?

  9. 9

    如何在一条线上加上短环?

  10. 10

    在matplotlib中的预测和ground_truth点之间绘制一条线

  11. 11

    如何绘制一条线以匹配 div 与 JQuery?

  12. 12

    如何从 StarUML 中的一条线上删除中点

  13. 13

    在librocket中绘制一条线(html)

  14. 14

    如何在iOS / Swift中基于当前位置的方位/航向值绘制一条线?

  15. 15

    如何在python中从2D数组的不同行获取的点之间绘制一条线?

  16. 16

    如何在条形图上正确绘制一条线?

  17. 17

    如何在uiTableViewCell的uiTextField下绘制一条线?

  18. 18

    如何在postgis中检查两个点是否在同一条线上

  19. 19

    如何用matplotlib画一条线?

  20. 20

    在JavaFX图表中添加一条线

  21. 21

    如何在D3中的水平条形图上的X轴上添加一条线

  22. 22

    如何在D3中的水平条形图上的X轴上添加一条线

  23. 23

    OpenGL:在另一条线上画一条线

  24. 24

    如何在画布上画一条线?

  25. 25

    如何在Cygwin中选择一条线

  26. 26

    如何在条形图的顶部添加一条线?

  27. 27

    如何在条形图的顶部添加一条线?

  28. 28

    如何在LiveCharts中添加每点工具提示?同一条线上的点如何具有不同的颜色?

  29. 29

    如何在LiveCharts中添加每点工具提示?同一条线上的点如何具有不同的颜色?

热门标签

归档