2017-09-30 16 views
0

Ich habe schon eine Weile daran gearbeitet, aber ich kann nicht darüber hinwegkommen. Die Sache ist, dass ich eine Vektordarstellung innerhalb eines tkinter Fensters einfügen möchte. Ich habe es geschafft, Linien und Funktionen in tkinter zu zeichnen, aber Vektoren sind eine ganz andere Geschichte. Hier ist der Code, den ich habe bisher für das Einbetten:Embed Vektor-Plot in Tkinter

import matplotlib 
matplotlib.use('TkAgg') 

from numpy import arange, sin, pi 
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg 
from matplotlib.backend_bases import key_press_handler 


from matplotlib.figure import Figure 

import tkinter as Tk 


root = Tk.Tk() 
root.wm_title("Embedding in TK") 

f = Figure(figsize=(5, 4), dpi=100) 
a = f.add_subplot(111) 

a.plot([7,8], [2, 4]) 

canvas = FigureCanvasTkAgg(f, master=root) 
canvas.show() 
canvas.get_tk_widget().pack(side=Tk.TOP, fill=Tk.BOTH, expand=1) 


Tk.mainloop() 

Und der Code für das Plotten Vektoren:

import matplotlib.pyplot as plt 
import numpy as np 
import tkinter as Tk 


v1 = (3, -4) 
v2 = (-6,4, 10) 

soa = np.array([[0, 0, v1[0], v1[1]], [0, 0, v2[0], v2[1]]]) 
X, Y, U, V = zip(*soa) 
plt.figure() 
ax = plt.gca() 
ax.quiver(X, Y, U, V, angles='xy', scale_units='xy', scale=1) 
ax.set_xlim([-10, 10]) 
ax.set_ylim([-5, 11]) 
plt.draw() 

plt.show() 

Tk.mainloop() 

Vielleicht gibt es eine Möglichkeit, diese beiden zu verschmelzen?

+0

Was genau ist das Problem? Es ist keine "ganz andere Geschichte"; in der Tat ist es alles gleich. – ImportanceOfBeingErnest

+0

Das ist die Sache, ich kann nicht sehen, wo genau diese beiden Codes beziehen. Im folgenden Code wird das Diagramm mit 'plt.show' angezeigt, während es oben mit a.plot() angezeigt wird. Das ist mein Hauptproblem. Entschuldigung, wenn ich nicht etwas Offensichtliches sehe. – AlBud

Antwort

0

Ich denke, Sie würden davon profitieren, ein wenig mehr auf der Matplotlib-Seite zu lesen und Beispiele anzusehen. Dann machst du es dir schwerer, als es sein muss. Beginnen Sie damit, ähnliche Dinge ähnlich zu nennen. Im ersten Fall haben Sie eine Achse a, im zweiten Fall nennen Sie es ax, appart der einzige Unterschied ist wirklich, dass anstelle von .plot Sie benötigen .quiver. plt.show wird nicht benötigt, da Sie canvas.show() haben.

import matplotlib 
matplotlib.use('TkAgg') 

from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg 

import numpy as np 
from matplotlib.figure import Figure 

import tkinter as Tk 


root = Tk.Tk() 
root.wm_title("Embedding in TK") 

f = Figure(figsize=(5, 4), dpi=100) 
ax = f.add_subplot(111) 

v1 = (3, -4) 
v2 = (-6,4, 10) 

soa = np.array([[0, 0, v1[0], v1[1]], [0, 0, v2[0], v2[1]]]) 
X, Y, U, V = zip(*soa) 

ax.quiver(X, Y, U, V, angles='xy', scale_units='xy', scale=1) 
ax.set_xlim([-10, 10]) 
ax.set_ylim([-5, 11]) 

canvas = FigureCanvasTkAgg(f, master=root) 
canvas.show() 
canvas.get_tk_widget().pack(side=Tk.TOP, fill=Tk.BOTH, expand=1) 


Tk.mainloop()