姓名:韩宜真

学号:17020120095

转载自:https://mp.weixin.qq.com/s/8vnS5wr8AiexU-06RfGGIA

【嵌牛导读】本文介绍一种Python-geopandas包绘制空间地图的方法。

【嵌牛鼻子】geopandas

【嵌牛提问】如何用python绘制地图呢?

【嵌牛正文】

geopandas 读取中国地图文件

geopandas提供了非常方便的read_file()方法用于读取geojson文件,我们直接进行默认投影(WGS84)的绘制,代码如下:

file = r"中国省级地图GS(2019)1719号.geojson"

nine = r"九段线GS(2019)1719号.geojson"

china_main = gpd.read_file(file)

china_nine = gpd.read_file(nine)

fig, ax = plt.subplots(figsize=(12, 8),dpi=80)

ax = china_main.plot(ax=ax)

ax = china_nine.plot(ax=ax)

可视化结果如下:

我们进行投影转换(epsg=2343)和进行一些简单的设置,代码如下:

fig, ax = plt.subplots(figsize=(12, 8),dpi=80)

ax = china_main.geometry.to_crs(epsg=2343).plot(fc="white",ec="black",ax=ax)

ax = china_nine.geometry.to_crs(epsg=2343).plot(ec="black",ax=ax)

这里注意to_crs(epsg=2343) 就可以进行投影转换了。

绘图数据操作

接下来,我们将我们要绘制的数据读取、转换并绘制在地图上,数据预览如下:

我们使用如下代码将其转换成具有地理信息的geopandas 格式数据:

scattergdf = gpd.GeoDataFrame(

scatter, geometry=gpd.points_from_xy(scatter.lon, scatter.lat),

crs="EPSG:4326")

scattergdf.head()

结果如下:

接下来再将其转换成 epsg=2343 投影下的数据:

scattergdf_2343 = scattergdf.to_crs(epsg=2343, inplace=True)

以上就完成的数据的处理操作了

地图可视化绘制

直接给出绘图代码,然后再进行解释。主要代码如下:

fig, ax = plt.subplots(figsize=(8,5),dpi=200,)

plt.rcParams['font.family'] = ['Times New Roman']

ax = china_main.geometry.to_crs(epsg=2343).plot(fc="white",ec="black",linewidth=.8,ax=ax)

ax = china_nine.geometry.to_crs(epsg=2343).plot(color="gray",linewidth=.9,ax=ax)

forloc, size,class_nameinzip(scattergdf_2343.geometry.representative_point(),\

scattergdf_2343["data"],scattergdf_2343["class"]):

ax.scatter(loc.x,loc.y,s=10*size,fc=class_color[class_name],ec="black",lw=.5,zorder=2)

#添加刻度线

forspinein['top','left',"bottom","right"]:

ax.spines[spine].set_color("none")

ax.set_xlim(china_nine_2343.geometry[0].x-500000, china_nine_2343.geometry[1].x)

ax.set_ylim(china_nine_2343.geometry[0].y, china_nine_2343.geometry[1].y)

ax.set_xticks([])

ax.set_yticks([])

#单独绘制图例散点

ax.scatter([], [], c='#E21C21', s=30,  label='cluster1',ec="black",lw=.5)

ax.scatter([], [], c='#3A7CB5', s=30,  label='cluster2',ec="black",lw=.5)

ax.scatter([], [], c='#51AE4F', s=30,  label='cluster3',ec="black",lw=.5)

ax.scatter([], [], c='white', s=1*10,label='1', edgecolor='black',lw=.5)

ax.scatter([], [], c='white', s=2*10,label='2', edgecolor='black',lw=.5)

ax.scatter([], [], c='white', s=3*10,label='3', edgecolor='black',lw=.5)

ax.scatter([], [], c='white', s=4*10,label='4', edgecolor='black',lw=.5)

ax.scatter([], [], c='white', s=5*10,label='5', edgecolor='black',lw=.5)

ax.legend(frameon=False,ncol=8,loc="upper center",

fontsize=9,columnspacing=.2)

ax.text(.91,-0.02,'\nVisualization by DataCharm',transform = ax.transAxes,

ha='center', va='center',fontsize = 6,color='black')

#添加南海小地图

ax_child = fig.add_axes([0.688, 0.125, 0.2, 0.2])

ax_child = china_main.geometry.to_crs(epsg=2343).plot(ax=ax_child,

fc="white",

ec="black",)

ax_child = china_nine.geometry.to_crs(epsg=2343).plot(ax=ax_child,

color="gray",

linewidth=.9,

)

forloc, size,class_nameinzip(scattergdf_2343.geometry.representative_point(),\

scattergdf_2343["data"],scattergdf_2343["class"]):

ax_child.scatter(loc.x,loc.y,s=10*size,fc=class_color[class_name],ec="black",lw=.5,zorder=2)

ax_child.set_xlim(china_nine_2343.geometry[2].x, china_nine_2343.geometry[3].x)

ax_child.set_ylim(china_nine_2343.geometry[2].y, china_nine_2343.geometry[3].y)

# 移除子图坐标轴刻度,

ax_child.set_xticks([])

ax_child.set_yticks([])

add_axes() 添加南海小地图

#添加南海小地图

ax_child = fig.add_axes([0.688, 0.125, 0.2, 0.2])

ax_child = china_main.geometry.to_crs(epsg=2343).plot(ax=ax_child,

fc="white",

ec="black",)

ax_child = china_nine.geometry.to_crs(epsg=2343).plot(ax=ax_child,

color="gray",

linewidth=.9,

)

forloc, size,class_nameinzip(scattergdf_2343.geometry.representative_point(),\

scattergdf_2343["data"],scattergdf_2343["class"]):

ax_child.scatter(loc.x,loc.y,s=10*size,fc=class_color[class_name],ec="black",lw=.5,zorder=2)

ax_child.set_xlim(china_nine_2343.geometry[2].x, china_nine_2343.geometry[3].x)

ax_child.set_ylim(china_nine_2343.geometry[2].y, china_nine_2343.geometry[3].y)

# 移除子图坐标轴刻度,

ax_child.set_xticks([])

ax_child.set_yticks([])

可以发现,除了显示范围的不同外,其他的和绘制主题部分的代码一致。

单独添加图例

#单独绘制图例散点

ax.scatter([], [], c='#E21C21', s=30,  label='cluster1',ec="black",lw=.5)

ax.scatter([], [], c='#3A7CB5', s=30,  label='cluster2',ec="black",lw=.5)

ax.scatter([], [], c='#51AE4F', s=30,  label='cluster3',ec="black",lw=.5)

ax.scatter([], [], c='white', s=1*10,label='1', edgecolor='black',lw=.5)

ax.scatter([], [], c='white', s=2*10,label='2', edgecolor='black',lw=.5)

ax.scatter([], [], c='white', s=3*10,label='3', edgecolor='black',lw=.5)

ax.scatter([], [], c='white', s=4*10,label='4', edgecolor='black',lw=.5)

ax.scatter([], [], c='white', s=5*10,label='5', edgecolor='black',lw=.5)

ax.legend(frameon=False,ncol=8,loc="upper center",

fontsize=9,columnspacing=.2)

这部分还是为了更好的定制化图例,希望大家可以掌握。

最终,我们的可视化效果如下:

注:该数据只限于练习交流,请勿用于科研、出版使用。

总结

本期推文使用了Python-geopandas进行了中国地图的绘制,讲解了数据标记,投影转换等内容。但需指出的是:

geopandas 的安装较为麻烦,建议使用 conda install --channel conda-forge geopandas 进行安装。

Python 绘制空间可视化还是存在部分问题(无法较容易的添加如比例尺、指北针等空间绘图元素),也在进一步完善过程中。

python画指北针_Python-geopandas 中国地图绘制相关推荐

  1. python画指北针_python如何画出漂亮的地图?

    python如何画出漂亮的地图? 要画一张好看的地图,数据量的多少.底图的支持程度与选择乃至个人的美学素养是一张好看的地图重要的因素.目前python也有很多能够实现地图可视化的包,这里给大家推荐最基 ...

  2. python画国际象棋_python图形工具turtle绘制国际象棋棋盘

    本文实例为大家分享了python图形工具turtle绘制国际象棋棋盘的具体代码,供大家参考,具体内容如下 #编写程序绘制一个国际象棋的棋盘 import turtle turtle.speed(30) ...

  3. python 画蝴蝶_python如何使用matplotlib绘制蝴蝶图案-百度经验

    1 首先,先写上我们需要的公式: 2 接着,引入我们需要的模块: 3 接着,创建笛卡尔坐标系: 4 执行上述代码,我们得到一个笛卡尔坐标系: 5 蝴蝶有4个部分构成,而绘制花瓣的思路可以帮到我们,我们 ...

  4. python 画三角函数_python,将三角函数绘制成二维数组

    看起来a, b, c是常量,z是a和{}之间的np.linspace.在a = 1 b = 2 c = 3 def triangle (z, a = a, b = b, c = c): y = np. ...

  5. 怎样用python画雪花_python使用turtle库与random库绘制雪花

    本文实例为大家分享了python绘制雪花的具体代码,供大家参考,具体内容如下 代码非常容易理解,画着玩玩还是可以的.直接上代码 # -*- coding: utf-8 -*- "" ...

  6. 利用python画各类世界、中国、区县地图(转)

    首先安装对应的python模块 $ pip install pyecharts==0.5.10 $ pip install echarts-countries-pypkg $ pip install ...

  7. python程序创建词云 中国地图_Python基于wordcloud及jieba实现中国地图词云图

    热词图很酷炫,也非常适合热点事件,抓住重点,以图文结合的方式表现出来,很有冲击力.下面这段代码是制作热词图的,用到了以下技术: jieba,把文本分词 wordcloud,制作热图 chardet,辨 ...

  8. vue如何用echarts画可缩放的中国地图(省会飞行图)

    1.创建一个容器之后设计统计图的地理坐标组件与图表类型(事先请保证已经导入了echart依赖包) <template><div ref="ChinaMap"> ...

  9. python画蝴蝶_python画蝴蝶曲线图的实例

    蝴蝶曲线是由Temple H·Fay发现的可用极坐标函数表示的蝴蝶曲线. 由于此曲线优美, 因此就想把它作为博客favicon.ico,这里我使用pytho matplotlib.pyplot包来绘制 ...

  10. python 画蝴蝶_python画蝴蝶曲线图的实例

    蝴蝶曲线是由Temple H·Fay发现的可用极坐标函数表示的蝴蝶曲线. 由于此曲线优美, 因此就想把它作为博客favicon.ico,这里我使用pytho matplotlib.pyplot包来绘制 ...

最新文章

  1. [HNOI 2014]画框
  2. express+mongodb+vue实现增删改查-全栈之路2.0
  3. QT的QGLFunctions类的使用
  4. Android的学习之路(三)项目的启动过程和安装过程具体解释
  5. 如何在C#中使用 ArrayPool,MemoryPool
  6. mysql语句怎么记_mysql语句记录
  7. 你觉得你有那些特质让你比别人更适合做产品经理?
  8. 2017-2018-1 20155209 《信息安全系统设计基础》第一周学习总结
  9. java lang runtimeexception什么意思_Java基础之异常
  10. sql nolock_SQL Server NOLOCK和最佳优化
  11. Azure China (5) 管理Azure China Powershell
  12. Hadoop安装教程 Linux版
  13. 不要经常让别人抄袭你的报告,否则他们会学会Word排版的艺术
  14. Java UDP编程
  15. 《专注力--化繁为简的惊人力量》之创造力的30天
  16. 初等代数(2):不等式、数列与简单级数、阶乘、排列组合、二项式与多项式
  17. 常用印制电路板标准汇总
  18. 研究生做java如何发论文_研究生毕业论文怎么发表
  19. 大数据(一)数据采集 3
  20. 电信高清语音服务器,电信VoLTE高清通话来了,来电秒接通、打电话4G不掉线!...

热门文章

  1. 英语语法-----一般现在时
  2. 人工智能迅猛发展,如何应对避免失业?
  3. unity中显示fps
  4. 光学efl_海康机器人:镜头学堂之工业镜头参数知多少
  5. 使用requests爬取携程网飞机票价格实例
  6. ubuntu resolution
  7. 国产低代码开发平台,这5个值得一试
  8. 区块链基础知识的归纳与总结
  9. 5G消息亮相2021国际数字科技展暨天翼智能生态博览会
  10. 如何获得自己的外网IP?