簡體   English   中英

圖形線不出現(tkinter,matplotlib)

[英]the graphs lines doesn't appear (tkinter, matplotlib)

我有一個有一些圖表的 gui 應用程序。 我用我的圖表作為子圖。 當我開始顯示圖表時,圖表線不會出現,但軸仍在繼續。 我不知道是什么問題。 我還編寫了一個簡單的代碼,它有 2 個子圖,它們工作正常,但這個不工作。 這是代碼。 它可以是可執行的。 當您按下界面圖中的“ Start Listing Datas ”按鈕時,將啟動。 我希望代碼是可以理解的。 我剪掉了一些不必要的部分。

from tkinter import *
from tkinter import ttk 
import time 
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import (FigureCanvasTkAgg)
import random

root = Tk()

root.title("ktu")
root.state('zoomed')
root.configure(bg="#0059aa")
plt.style.use('ggplot')


#------------------------------------------------------------------------------------------------------------------------------------

#datas !!!!!!!!!!!!!!!!!!!!
global datas
datas = []
global packageNum
packageNum = 0
def randomData():
    # randData.clear()
    randData = []
    
    randData.append(356356)
    
    global packageNum
    packageNum = packageNum+1
    randData.append(packageNum)
    
    randData.append(    time.strftime("%H") + ":"+  
                     time.strftime("%M") + ":"+
                     time.strftime("%S") + ", " +
                     time.strftime("%d") + "/"+
                     time.strftime("%m") + "/"+
                     time.strftime("%Y"))
    randData.append(random.randint(0,10000)) # data for yindex 3
    randData.append(random.randint(0,10000)) # data for yindex 4
    randData.append(random.randint(0,700))   # data for yindex 5
    randData.append(random.randint(0,700))   # data for yindex 6
    randData.append(randData[6]-randData[5]) 
    randData.append(random.randint(10,20))   # data for yindex 8
    randData.append(random.randint(20,25))   # data for yindex 9
    randData.append(random.randint(39,50))   # data for yindex 10
    randData.append(random.randint(1,6))     # data for yindex 11
    randData.append(0.0000) 
    randData.append(0.0000) 
    randData.append(random.randint(0,700)) 
    randData.append(0.0000) 
    randData.append(0.0000) 
    randData.append(random.randint(0,700)) 
    randData.append("durum")
    randData.append(random.randint(0,100)) 
    randData.append(random.randint(0,100)) 
    randData.append(random.randint(0,100)) 
    randData.append(random.randint(0,50)) 
    randData.append("hayır")
    randData.append(" ")

    return randData 





#------------------------------------------------------------------------------------------------------------------------------------

#seri port 

seriPortOuter = LabelFrame(root,text=u"SERIAL PORT",border=3, width=170,height=210)
seriPortOuter.place(x=5,y=305)

text1= Label(seriPortOuter,text=u"get connection", width=14, 
                    font=("Helvetica",10),
                    fg="white", bg="red")
text1.place(x=3,y=5)

text2= Label(seriPortOuter,text="COM Port", width=8, 
                    font=("Helvetica",10))
text2.place(x=1,y=30)

portList = ["Option1", "Option2", "Option3",
          "Option4", "Option5", "Option6"]
 
portCombo = ttk.Combobox(seriPortOuter, values = portList, width=8)
portCombo.set("")
portCombo.place(x=68,y=30)



text3= Label(seriPortOuter,text=u"Speed", width=4, 
                    font=("Helvetica",10))
text3.place(x=1,y=55)

speedList = ["Option1", "Option2", "Option3",
          "Option4", "Option5", "Option6"]
 
speedCombo = ttk.Combobox(seriPortOuter, values = speedList, width=8)
speedCombo.set("") 
speedCombo.place(x=68,y=55)

global x
x=0
def StartListing():

    root.after(2000,StartListing)
    global x
    
    global datas
    datas = randomData()
    GraphIt(plot1, x, 3, plot1Canvas,fig_plot1, 0, 0)
    GraphIt(plot2, x, 4, plot2Canvas,fig_plot2, 1, 0) 
    GraphIt(plot3, x, 5, plot3Canvas,fig_plot3, 0, 1)
    GraphIt(plot4, x, 6, plot4Canvas,fig_plot4, 1, 1)
    GraphIt(plot5, x, 10, plot5Canvas,fig_plot5, 0, 2)
    GraphIt(plot6, x, 9, plot6Canvas,fig_plot6, 1, 2)
    GraphIt(plot7, x, 11, plot7Canvas,fig_plot7, 0, 3)
    GraphIt(plot8, x, 8, plot8Canvas,fig_plot8, 1, 3)
    x= x+1



StartListingButton = Button(seriPortOuter, text=u"Start Listing Datas", command=StartListing, width=19)
StartListingButton.place(x=10,y=125)


#graph

graph_canvas = Canvas(root, width=842,height=575, bg="#0059aa" )
graph_canvas.place(x=585,y=30) #607~

# graph_canvas.config(highlightbackground="white")

#Pressure 1

fig_plot1= Figure(figsize=(2.33,2.5), dpi=100)
plot1= fig_plot1.add_subplot(111)
plot1.set_title(u'Pressure1 (Pa)',fontsize=8)
plot1Canvas = FigureCanvasTkAgg(fig_plot1, master=graph_canvas)
plot1Canvas.get_tk_widget().grid(row=0,column=0,pady=5, padx=3)
plot1Canvas.draw()

#basınç 2
fig_plot2= Figure(figsize=(2.33,2.5), dpi=100)
plot2= fig_plot2.add_subplot(111)
plot2.set_title(u'Pressure2 (Pa)',fontsize=8)
plot2Canvas = FigureCanvasTkAgg(fig_plot2, master=graph_canvas)
plot2Canvas.get_tk_widget().grid(row=1,column=0,pady=5, padx=3)
plot2Canvas.draw()

#yükseklik 1
fig_plot3= Figure(figsize=(2.33,2.5), dpi=100)
plot3= fig_plot3.add_subplot(111)
plot3.set_title(u'altitude1 (m)',fontsize=8)
plot3Canvas = FigureCanvasTkAgg(fig_plot3, master=graph_canvas)
plot3Canvas.get_tk_widget().grid(row=0,column=1,pady=5, padx=2)
plot3Canvas.draw()

#yükseklik 2
fig_plot4= Figure(figsize=(2.33,2.5), dpi=100)
plot4= fig_plot4.add_subplot(111)
plot4.set_title(u'altitude2 (m)',fontsize=8)
plot4Canvas = FigureCanvasTkAgg(fig_plot4, master=graph_canvas)
plot4Canvas.get_tk_widget().grid(row=1,column=1,pady=5, padx=2)
plot4Canvas.draw()

#nem özgün görev
fig_plot5= Figure(figsize=(2.33,2.5), dpi=100)
plot5= fig_plot5.add_subplot(111)
plot5.set_title('temperature (°C)',fontsize=8)
plot5Canvas = FigureCanvasTkAgg(fig_plot5, master=graph_canvas)
plot5Canvas.get_tk_widget().grid(row=0,column=2,pady=5, padx=2)
plot5Canvas.draw()

#sıcaklık
fig_plot6= Figure(figsize=(2.33,2.5), dpi=100)
plot6= fig_plot6.add_subplot(111)
plot6.set_title(u'temperature (°C)',fontsize=8)
plot6Canvas = FigureCanvasTkAgg(fig_plot6, master=graph_canvas)
plot6Canvas.get_tk_widget().grid(row=1,column=2,pady=5, padx=2)
plot6Canvas.draw()

#pil
fig_plot7= Figure(figsize=(2.33,2.5), dpi=100)
plot7= fig_plot7.add_subplot(111)
plot7.set_title('voltage (V)',fontsize=8)
plot7Canvas = FigureCanvasTkAgg(fig_plot7, master=graph_canvas)
plot7Canvas.get_tk_widget().grid(row=0,column=3,pady=5, padx=2)
plot7Canvas.draw()

#hız
fig_plot8= Figure(figsize=(2.33,2.5), dpi=100)
plot8= fig_plot8.add_subplot(111)
plot8.set_title(u'descent velocity (m/sn)',fontsize=8)
plot8Canvas = FigureCanvasTkAgg(fig_plot8, master=graph_canvas)
plot8Canvas.get_tk_widget().grid(row=1,column=3,pady=5, padx=2)
plot8Canvas.draw()


def GraphIt(myplot,xindex, yindex, canvas, fig, rw, col):
    myplot.plot(xindex, datas[yindex])

    canvas = FigureCanvasTkAgg(fig,master=graph_canvas)
    canvas.draw()
    canvas.get_tk_widget().grid(row=rw,column=col,pady=5, padx=2)
    plt.show()
    




root.mainloop()

plot默認要畫線,一條線至少需要 2 個 xy 對。 為了只繪制一個點, plot接受第三個參數,例如 'ro' 來表示一個紅點。

已經為每個圖形創建了canvas ,不需要再次調用FigureCanvasTkAgg來獲取新的畫布。

def GraphIt(myplot, xindex, yindex, canvas, fig, rw, col):
    myplot.plot(xindex, datas[yindex], 'ro')
    # canvas = FigureCanvasTkAgg(fig,master=graph_canvas)
    canvas.draw()
    # canvas.get_tk_widget().grid(row=rw, column=col, pady=5, padx=2)
    # plt.show()

要繪制線段,需要更多點作為參數,以下代碼保留舊數據並發送兩個點作為參數,然后您會發現線段已繪制。

global x, old_datas
x, old_datas = 0, None

def StartListing():

    root.after(2000,StartListing)
    global x

    global datas, old_datas
    datas = randomData()
    GraphIt(plot1, x,  3, plot1Canvas, fig_plot1, 0, 0)
    GraphIt(plot2, x,  4, plot2Canvas, fig_plot2, 1, 0)
    GraphIt(plot3, x,  5, plot3Canvas, fig_plot3, 0, 1)
    GraphIt(plot4, x,  6, plot4Canvas, fig_plot4, 1, 1)
    GraphIt(plot5, x, 10, plot5Canvas, fig_plot5, 0, 2)
    GraphIt(plot6, x,  9, plot6Canvas, fig_plot6, 1, 2)
    GraphIt(plot7, x, 11, plot7Canvas, fig_plot7, 0, 3)
    GraphIt(plot8, x,  8, plot8Canvas, fig_plot8, 1, 3)
    x= x+1
    old_datas = datas
def GraphIt(myplot, xindex, yindex, canvas, fig, rw, col):
    x1, y1 = xindex, datas[yindex]
    if old_datas:
        x0, y0 = x1-1, old_datas[yindex]
        myplot.plot([x0, x1], [y0, y1], 'r-')
    canvas.draw()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM