Ich versuche, ein Shapefile zu lesen und es mit matplotlib zu zeichnen. Hier ist der Code:
import matplotlib.pyplot as plt
import shapefile
shpFilePath = "D:\test.shp"
listx=[]
listy=[]
test = shapefile.Reader(shpFilePath)
for sr in test.shapeRecords():
for xNew,yNew in sr.shape.points:
listx.append(xNew)
listy.append(yNew)
plt.plot(listx,listy)
plt.show()
Ich erhalte jedoch Linien, die meine Polygone verbinden. Wie kann ich die Polygone so zeichnen, dass sie der Weg in das Shapefile sind? Hier sehen Sie Screenshots des Diagramms und des Shapefiles, wenn es mit ArcGIS geöffnet wird.
shapefile
matplotlib
statBeginner
quelle
quelle
Antworten:
Ich überlasse es Ihnen, wie Sie die Formen sammeln, aber das ist das Prinzip
quelle
Für zukünftige Referenzen ist hier die Lösung, zu der ich gekommen bin, nachdem ich die obigen Hinweise befolgt habe.
Die resultierende Figur wird sehr farbenfroh sein, aber dann müssen Sie nur die Handlungsschlüsselwörter anpassen.
quelle
import shapefile
sich auf daspyshp
Paket beziehenSie müssen matplotlib- Pfade und -Patches verwenden , und es gibt ein Python-Modul, mit dem Sie mithilfe dieser Descartes- Funktionen Polygone aus Shapefiles zeichnen können .
Da Pyshp (Shapefile) die Konvention geo_interface ( New geo_interface for PyShp ) hat, können Sie diese verwenden.
Das Ergebnis ist die GeoJSON-Darstellung der Geometrie, und Sie können die Lösung von So zeichnen Sie Geodaten mit matplotlib / python
quelle
descartes
Lösung nicht funktioniert, wenn Sie versuchen, zwei verschiedene Shapefiles auf zwei benachbarten Unterplots mitfig, ax = plt.subplots(1,2,figsize=(15, 8))
und dannax[0].add_patch(PolygonPatch(poly_geo, fc='#d3d3d3', ec='#000000', alpha=0, zorder=5))
und zu zeichnenax[1].add_patch(PolygonPatch(poly_geo, fc='#d3d3d3', ec='#000000', alpha=0, zorder=5))
. Das Ergebnis ist ein leeres Bild. Irgendeine Idee?Dies kann entweder mit Geopandas oder mit pyshp erfolgen, wie in dieser Antwort erläutert . Geopanden verwenden matplotlib im Backend zum Plotten.
quelle
Zusätzlich zu ldocao Antwort und Beantwortung der Frage FaCoffee. Wenn Sie isolierte Inseln haben und diese Teil derselben Funktion sind, können Sie Folgendes versuchen:
Das macht es für mich arbeiten. Die Eigenschaft "Teile" einer Form gibt die Anfangsindizes der verschiedenen Geometrien innerhalb eines Features zurück.
quelle
Dennoch kann es in einer Shapefile-Form mehrere Teile geben. Dadurch wird jedes Teil innerhalb einer Form separat gezeichnet.
quelle