Eu estou tentando ler um shapefile e plotá-lo usando matplotlib. Aqui está o código:
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()
No entanto, recebo linhas conectando meus polígonos. Como posso desenhar os polígonos de forma que eles sejam o caminho no arquivo de forma. Aqui estão as capturas de tela do gráfico e do shapefile quando ele é aberto com o ArcGIS.
shapefile
matplotlib
statBeginner
fonte
fonte
Respostas:
Vou deixar para você como coletar as formas, mas este é o princípio
fonte
Para referências futuras, eis a solução que encontrei depois de seguir os conselhos acima.
A figura resultante será muito colorida, mas você precisará ajustar as palavras-chave da plotagem.
fonte
import shapefile
se refere aopyshp
pacote: pypi.python.org/pypi/pyshpVocê precisa usar caminhos e patches matplotlib e existe um módulo Python dedicado a plotar polígonos de shapefiles usando essas funções Descartes .
Como o Pyshp (shapefile) possui a convenção geo_interface ( Nova geo_interface para PyShp ), você pode usá-lo.
O resultado é a representação GeoJSON da geometria e você pode usar a solução de Como plotar dados geográficos usando matplotlib / python
fonte
descartes
solução não funcionará se você tentar plotar dois shapefiles diferentes em duas subparcelas adjacentes usandofig, ax = plt.subplots(1,2,figsize=(15, 8))
e entãoax[0].add_patch(PolygonPatch(poly_geo, fc='#d3d3d3', ec='#000000', alpha=0, zorder=5))
eax[1].add_patch(PolygonPatch(poly_geo, fc='#d3d3d3', ec='#000000', alpha=0, zorder=5))
. O resultado é uma imagem vazia. Qualquer ideia?Isso pode ser feito usando geopandas ou pyshp, conforme discutido nesta resposta . Geopandas usam matplotlib em seu back-end para plotagem.
fonte
Além de responder a ldocao e responder à pergunta do FaCoffee. Quando você tiver ilhas isoladas e elas fizerem parte do mesmo recurso, poderá tentar a seguir:
Isso faz funcionar para mim. A propriedade "partes" de uma forma retorna os índices iniciais de diferentes geometrias dentro de um recurso.
fonte
Ainda assim, em um formato de arquivo de forma, pode haver várias partes. Isso plotará cada parte em uma forma, separadamente.
fonte