2013-10-09 5 views
6

Ich zeichne ein Polygon in Matplotlib. Ich gebe alle Koordinaten der Punkte ein. Zwischen einigen Punkten möchte ich runde oder radiale Kanten anstelle von geraden Linien (sagen wir die Punkte 1 und 2 auf der Zeichnung). Ist das möglich? Wenn nicht, was ist die effizienteste Art, es zu zeichnen?matplotlib - Radius in Polygonkanten - ist das möglich?

example drawing

EDIT: Rutgers Lösung funktioniert gut

enter image description here

+0

Sie meinen, Sie eine geglättete Kurve passen wollen? – doctorlove

+0

Ich meine einen Bogen mit zwei angegebenen Punkten und Radius. –

Antwort

3

Sie Bögen, indem die Polygone von Pfaden können

Ein normales Quadrat:..

import matplotlib.path as mpath 
import matplotlib.patches as patches 

verts = [(0,0), 
     (1,0), 
     (1,1), 
     (0,1), 
     (0,0)] 

codes = [mpath.Path.MOVETO] + (len(x)-1)*[mpath.Path.LINETO] 
square_verts = mpath.Path(verts, codes) 

fig, ax = plt.subplots(subplot_kw={'aspect': 1.0, 'xlim': [-0.2,1.2], 'ylim': [-0.2,1.2]}) 

square = patches.PathPatch(square_verts, facecolor='orange', lw=2) 
ax.add_patch(square) 

enter image description here

A abgerundet quadratisch mit gemacht werden:

verts = [(0.2, 0.0), 
     (0.8, 0.0), # start of the lower right corner 
     (1.0, 0.0), # intermediate point (as if it wasn't rounded) 
     (1.0, 0.2), # end point of the lower right corner 
     (1.0, 0.8), # move to the next point etc. 
     (1.0, 1.0), 
     (0.8, 1.0), 
     (0.2, 1.0), 
     (0.0, 1.0), 
     (0.0, 0.8), 
     (0.0, 0.2), 
     (0.0, 0.0), 
     (0.2, 0.0)] 

codes = [mpath.Path.MOVETO, 
     mpath.Path.LINETO, 
     mpath.Path.CURVE3, 
     mpath.Path.CURVE3, 
     mpath.Path.LINETO, 
     mpath.Path.CURVE3, 
     mpath.Path.CURVE3, 
     mpath.Path.LINETO, 
     mpath.Path.CURVE3, 
     mpath.Path.CURVE3, 
     mpath.Path.LINETO, 
     mpath.Path.CURVE3, 
     mpath.Path.CURVE3] 


rounded_verts = mpath.Path(verts, codes) 

fig, ax = plt.subplots(subplot_kw={'aspect': 1.0, 'xlim': [-0.2,1.2], 'ylim': [-0.2,1.2]}) 

rounded_verts = patches.PathPatch(rounded_verts, facecolor='orange', lw=2) 
ax.add_patch(rounded_verts) 

enter image description here

Für Ihr Beispiel würden Sie einen Zwischenpunkt angeben müssen, welche die x-coordinate von Point1 verwendet und die y-coordinate von Point2.

Der matplotlib Pfad Tutorial liefert eine detaillierte Beschreibung, wie Wege hergestellt werden können: http://matplotlib.org/users/path_tutorial.html