在互联网上,我找到了如何使用Python制作专题图的方法:
这是我尝试过的一些代码:
import shpUtils
import matplotlib.pyplot as plt
shpRecords = shpUtils.loadShapefile('C:\Users\shapefile.shp')
for i in range(0,len(shpRecords)):
x = []
y = []
for j in range(0,len(shpRecords[i]['shp_data']['parts'][0]['points'])):
tempx = float(shpRecords[i]['shp_data']['parts'][0]['points'][j]['x'])
tempy = float(shpRecords[i]['shp_data']['parts'][0]['points'][j]['y'])
x.append(tempx)
y.append(tempy)
plt.fill(x,y)
plt.axis('equal')
plt.title("Testing")
plt.show()
但是,当我运行它时,它会给我随机的颜色。
如果我想可视化shapefile的某一列,如何使用类似的代码实现呢?
这在上面的链接中非常不清楚,他只讨论颜色的使用...
我是否可能需要额外的模块来完成此操作,例如笛卡尔和PySAL ?
#1 楼
我不了解ArcPy,但是多年来我一直在Python中使用shapefile和栅格。 shpUtils是其中之一,不是最常用的。其他,请参见Pypi:GIS和gis.stackexchange上的示例以及Web上的许多示例(不仅是英文)。它们中的大多数比ArcPy(或arcgisscripting)要古老得多。 >要绘制几何图形,您可以使用matplotlib和可能的笛卡尔,将matplotlib的“扩展”用于区域,但也可以使用许多其他模块,请参见Pypi:绘图和maymay等模块用于3D表示(也包括matplotlib)还有诸如mapnik之类的模块,它们直接为您提供以下可能性:1)读取shapefile和4)使用模块Pycairo进行绘图。
之后,它就像GIS: br />您可以使用模块1)打开,保存shapefile,并根据需要使用其他模块(例如numpy或scipy)进行处理。
您可以使用shape来处理和分析几何对象(缓冲区)。等)。
您可以使用matplotlib绘制几何图形,但是matplotlib不知道您要绘制什么图形。您可以使用模块1)或3)来指定要绘制的内容(属性等)和方式。如何在代码中实现呢?
所以,您必须学习matplotib和其他模块。您必须学习ArcPy,这是相同的...(网络上有很多很棒的教程,尤其是对于matplolib而言,ArcPy更容易,因为它是纯Python)。
一些示例仅限Python
具有基于属性的颜色的地质图(多边形shapefile)
基于属性的颜色的3D点(PointZ形状文件)
DEM上的3D点(具有z作为属性的点形状文件)和3D线(PolyLineZ形状文件),
基于原始shapefile(折线)的属性(地质构造=横截面)的具有z值和颜色的地形轮廓shapefile)
DEM(GeoTIFF),带有模块Mayavi2
DEM(ESRI ascii网格, .asc)和带有visvis模块的Point shapefile(以z为属性)
钻孔(折线Z的3D缓冲区,其颜色基于属性(地质构造) ,其栅格表面是通过点shapefile(以z为属性)中的numpy和matplotlib模块计算的,并使用visvis
模块可视化
#2 楼
我遇到了类似的问题,需要快速可视化shapefile,并且我总是发现Matplotlib方法相当长,可以完成这么小的任务。相反,我开发了“ Python地理可视化工具”模块,或简称为GeoVis。更新:v0.2.0现在已经发布了许多新功能。借助它可以直观地显示shapefile:
import geovis
geovis.ViewShapefile("C:/yourshapefile.shp")
Voila,您在Tkinter窗口中将映射弹出为图像也可以将地图保存到图像文件。还可以对地图进行样式,着色和添加多层,并且在最新版本中,您还可以基于属性进行分类并放大到特定区域。在下面的地图中,geovis在大约5分钟内加载了世界上所有的GADM省并对其进行了分类着色。您可以从此处下载GeoVis,还可以在此处阅读有关其使用方法的更多信息。 ,因此具有Python并且不需要任何其他模块的任何人都可以使用GeoVis,因为它可以使用内置的Tkinter Canvas作为渲染器。但是强烈建议您拥有或获取Aggdraw,PIL或PyCairo,它们也可以用作渲染器,并且速度更快,质量更高。
Backdraw是您的shapefile必须使用纬度/经度坐标系进行非投影-它尚不能处理投影或变换。
#3 楼
我遇到了许多我想分享的有关此主题的教程:所以您想使用Python制作地图-StephanHügel
如何使用免费工具制作美国县专题地图-内森·丘
A Python中的专题图-Daniel Lewis
用<10行Python创建地图可视化-Rob Story
还考虑使用R:如何在R中创建引人入胜的色度图?
#4 楼
在2019年,用python中的shapefile制作专题图的最简单方法是geopandas。文档中的示例:http://geopandas.org/mapping.html
import geopandas
world = geopandas.read_file(geopandas.datasets.get_path('naturalearth_lowres'))
world['gdp_per_cap'] = world.gdp_md_est / world.pop_est
world.plot(column='gdp_per_cap')