2017-03-14 2 views
1

A triplot von Delaunay simplices gibt eine Liste mit zwei Line2D Objekte, Kanten und Knoten:Plot nur Kanten der Dreiecke mit matplotlib triplot

tri=scipy.spatial.Delaunay(points) 
plt.triplot(points[:,0],points[:,1],tri.simplices.copy(),'k-o', label='Delaunay\ntriangulation') 

Wie kann ich eine Delaunay-Triangulation ohne Marker für die Dreieck-Knoten zu zeichnen, (nur die Kanten)? Alternativ möchte ich den Marker-Eintrag aus der Legende entfernen (ersetzt 'k-0' mit 'k-' erzeugt immer noch zwei Einträge in der Legende). delaunay

Antwort

1

Die erzeugt zwei Legendeneinträge. Die erste davon sind die Kanten, die zweite enthält die Punkte (Knoten). Auch wenn der Marker auf marker=None gesetzt ist, ist dieser Legendeneintrag vorhanden.

Die einfachste Möglichkeit, den Legendeneintrag zu entfernen, besteht darin, die Legendenhandles (ax.get_legend_handles_labels()) zu erhalten und eine Legende nur mit dem ersten Zeichensatz zu erstellen.

h, l = plt.gca().get_legend_handles_labels() 
plt.legend(handles=[h[0]],labels=[l[0]]) 

An dieser Stelle ist es die Auswahl des Benutzers, ob die Knoten markiert hat ("k-o") oder nicht ("k-"); Es wird nur einen Legendeneintrag geben.

enter image description here

import numpy as np; np.random.seed(6) 
import scipy.spatial 
import matplotlib.pyplot as plt 

points=np.random.rand(7, 2) 

tri=scipy.spatial.Delaunay(points) 
plt.triplot(points[:,0],points[:,1],tri.simplices.copy(),'k-o', 
      label='Delaunay\ntriangulation') 

h, l = plt.gca().get_legend_handles_labels() 
plt.legend(handles=[h[0]],labels=[l[0]]) 
plt.show() 
+0

Dank! Das war in der Tat der einfachste Weg. Und jetzt weiß ich, wie man Legendeneinträge steuert. – Daniel