2016-11-17 4 views
0

Ich versuche, ein Paar von zwei Listen zu visualisieren, dargestellt durch lines_x und lines_y, die in das Koordinatenargument der plot-Funktion in Axes oder in Lines2D gesteckt werden sollen.Matplotlib Lines zeichnet zusätzliche Linien in meinem Plot

Gerade jetzt, bekomme ich dieses Ergebnis, das zusätzliche Zeilen im Vergleich zu dem Ergebnis, das ich versuche, zu bekommen. Was ich zur Zeit bin immer:

enter image description here

Früher habe ich versucht, eine Schleife mit den Linien eins nach dem anderen zu zeichnen, und das für eine Weile gearbeitet. Nach einigen Durchläufen funktionierte es jedoch nicht mehr.

Könnte jemand bitte einen Weg vorschlagen, um das folgende Ergebnis auf meinem Fenster zu erreichen?

Die Handlung ich erreichen möchte:

enter image description here

from pylab import * 
import matplotlib 
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg 
from matplotlib.figure import Figure 
import matplotlib.pylab as plt 
import matplotlib.pyplot as pltplot 
import matplotlib.lines 
from matplotlib.collections import LineCollection 
matplotlib.use ("gTkAgg") 

import numpy as np 

import tkinter as tk 
from tkinter import Tk 
from tkinter import * 

class Window (Frame): 
    lines_x = [-2, -2, -1, -1, 0, 0, 1, 1, 2, 2, 0, 1, 1, 2, -2, 2, -2, -1, -1, 0] 
    lines_y = [0, 1, 1, 2, -2, 2, -2, -1, -1, 0, -2, -2, -1, -1, 0, 0, 1, 1, 2, 2] 

    def __init__(self, parent = None): 

     Frame.__init__(self,parent) 
     parent.title("Shape Grammar Interpreter") 

     self.top=Frame() 
     self.top.grid() 
     self.top.update_idletasks 

     self.menu() 
     self.makeWidgets() 

    def makeWidgets(self): 
     self.f = Figure(figsize = (6,6), dpi = 100) 
     self.a = self.f.add_subplot(111) 

     #self.a.plot(self.lines_x, self.lines_y, linewidth = 4.0, picker=5) 

     line = Line2D(self.lines_x, self.lines_y) 

     self.a.add_line(line) 
     for i in range(len(self.lines_x)): 
      self.a.plot(self.lines_x[i:i+1], self.lines_y[i:i+1], linewidth = 4.0) 

     #self.a.plot(lines_x, lines_y, linewidth = 4.0, color = "blue") 
     self.a.margins(y=0.5) 
     self.a.margins(x=0.5) 
     #self.a.axes.get_xaxis().set_visible(False) 
     #self.a.axes.get_yaxis().set_visible(False) 

     # a tk.DrawingArea 
     self.canvas = FigureCanvasTkAgg(self.f, master=self.top) 

     #to show window 
     self.canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1) 

    def menu(self): 
     menubar = Menu (root) 

     #to close window 
     menubar.add_command(label="Exit", command=self.quit_window) 
     root.config(menu=menubar) 

    def quit_window(self): 
     root.quit() 
     root.destroy() 


if __name__ == "__main__": 

    root = Tk() 
    my_gui = Window(root) 
    root.mainloop() 

Antwort

1

Es macht Sinn, wenn Sie die Reihenfolge notieren, in der die Liniensegmente gezeichnet werden. Zum Beispiel (nur die ersten 10 Punkte Plotten, sonst ist es ein bisschen ein Durcheinander wird):

import matplotlib.pylab as pl 

lines_x = [-2, -2, -1, -1, 0, 0, 1, 1, 2, 2, 0, 1, 1, 2, -2, 2, -2, -1, -1, 0] 
lines_y = [0, 1, 1, 2, -2, 2, -2, -1, -1, 0, -2, -2, -1, -1, 0, 0, 1, 1, 2, 2] 

n = 10 

pl.figure() 
pl.plot(lines_x[:n], lines_y[:n]) 

# Number the coordinates to indicate their order: 
for i in range(len(lines_x[:n])): 
    pl.text(lines_x[i], lines_y[i], '{}'.format(i)) 

pl.xlim(-3,3) 
pl.ylim(-3,3) 

Ergebnisse in:

enter image description here

Wenn ich n erhöhen, wird es ein größeres Chaos da Eine Reihe von x,y Koordinaten sind Duplikate. Also:

  1. Vergewissern Sie sich, dass es keine doppelte Koordinaten
  2. Stellen Sie sicher, dass die Koordinaten richtig geordnet.
+0

Nicht was ich suchte, aber danke. Das Problem wurde bereits gelöst. –

0

diese Sequenzen Versuchen Sie stattdessen:

lines_x = [-2, -2, -1, -1, 0, 0, 1, 1, 2, 2, -2] 
lines_y = [ 0, 1, 1, 2, 2, -2, -2, -1, -1, 0, 0] 

für mich gearbeitet:

enter image description here

Auch soll ich anmerken, dass ich verwenden einfach

In [1]: import matplotlib.pyplot as plt 

In [2]: plt.plot(lines_x,lines_y) 

Deshalb glaube ich, Linien nichts damit zu tun haben.