今天的推文教程使用geopandas进行空间图表的绘制(geopandas空间绘图很方便,省去了很多的数据处理过程,而且也完美衔接matplotlib,学习python 空间绘图的小伙伴可以看下啊),具体为空间气泡图的绘制,主要涉及的内容如下:

geopandas geojson数据格式读取并可视化展示

单独添加散点大小图例图层

adjustText 库解决文本重叠问题

geopandas geojson数据操作

这里我们选择的为香港地图的geojson 文件数据,此类文件可在DAtAV 地图选择器进行下载。下载所得的文件名为香港特别行政区.json,可视化效果如下:

数据读取

使用geopandas 的read_file()方法就可很方便的进行数据读取,代码如下:

hk_file = r"F:\DataCharm\商业艺术图表仿制\香港地图可视化\香港特别行政区.json"

hk = geopandas.read_file(hk_file)

更多geopandas 读取数据方法,可以参看geopandas官网进行学习了解。

数据可视化展示

在读取完数据之后,我们可以直接使用geopandas的plot() 方法进行绘制,代码如下(做了简单的颜色设置):

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

hk_map = hk.geometry.plot(ax=ax,fc="#CCEBEB",ec="#009999",lw=1)

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

ha='center', va='center',fontsize = 8)

ax.axis('off') # 移除坐标轴

plt.savefig('hk_charts_pir.png',width=8,height=8,

dpi=900,bbox_inches='tight',facecolor='white')

结果如下:

区名文本添加:在读取的数据结果中有

name 列为对应的区名,使用

hk.geometry.representative_point() 方法计算出其

代表性 点的经纬度信息用于绘制文本位置,结果如下:

再通过使用ax.text()方法添加文本即可,代码如下:

for loc, label in zip(hk.geometry.representative_point(),hk.name):

ax.text(loc.x,loc.y,label,size=13,color="#0DCFE3")

结果如下:

添加气泡散点数据

这里的数据来源为我的朋友J哥的公号:菜J学Python,感谢提供数据支持。由于数据的经纬度是直接基于高德地图进行解析的,导致存在部分数据经纬度信息出错,我们使用pandas进行简单的数据筛选,具体就不再展示,后面会推出系列教程推文,数据预览如下:

这里主要使用红色框中的数据进行绘制,即使用scatter()方法加合理设置散点大小即可,代码如下:

for x,y,price in zip(scatter_se.lon,scatter_se.lat,scatter_se['实用单价']):

hk_map.scatter(x,y,s=price/500,color='#FFEB3B',alpha=.5,ec='k',lw=.1)

经过一些定制化设置效果如下:

气泡图例添加

这里我们不是直接基于数据进行图例的生成,而是单独进行其他图层的绘制进行图例生成,这样做的好处就是可以更加自由定制所需图例的颜色和大小,涉及的代码如下:

#这里进行单独的图例添加

ax.scatter([], [], c='#FFEB3B', s=6000/500,

label='6000 - 10000', edgecolor='black',lw=.5)

ax.scatter([], [], c='#FFEB3B', s=10000/500,

label='10000 - 30000', edgecolor='black',lw=.5)

ax.scatter([], [], c='#FFEB3B', s=30000/500,

label='30000 - 50000', edgecolor='black',lw=.5)

ax.scatter([], [], c='#FFEB3B', s=50000/500,

label='50000 - 90000', edgecolor='black',lw=.5)

#图例定制化设置

legend = ax.legend(frameon=False,ncol=4,loc='lower right',title='实用单价',bbox_to_anchor=(1, -.06),

fontsize=9)

legend.get_title().set_color('#ffffff')

for text in legend.get_texts():

text.set_color("#ffffff")

注意下代码的后半部分,这是对matplotlib 图例设置的定制化设定,也适用于其他图例。绘图完整代码如下:

fig, ax = plt.subplots(figsize=(10,8),dpi=200,facecolor='#323332',edgecolor='#323332')

ax.set_facecolor('#323332')

hk_map = hk.geometry.plot(ax=ax,fc="#292200",ec="gray",lw=1,alpha=.8)

#使用默认的text添加文本导致文本重叠

for loc, label in zip(hk.geometry.representative_point(),hk.name):

ax.text(loc.x,loc.y,label,size=11,color="#0DCFE3")

for x,y,price in zip(scatter_se.lon,scatter_se.lat,scatter_se['实用单价']):

hk_map.scatter(x,y,s=price/500,color='#FFEB3B',alpha=.5,ec='k',lw=.1)

ax.axis('off') # 移除坐标轴

#这里进行单独的图例添加

ax.scatter([], [], c='#FFEB3B', s=6000/500,

label='6000 - 10000', edgecolor='black',lw=.5)

ax.scatter([], [], c='#FFEB3B', s=10000/500,

label='10000 - 30000', edgecolor='black',lw=.5)

ax.scatter([], [], c='#FFEB3B', s=30000/500,

label='30000 - 50000', edgecolor='black',lw=.5)

ax.scatter([], [], c='#FFEB3B', s=50000/500,

label='50000 - 90000', edgecolor='black',lw=.5)

#图例定制化设置

legend = ax.legend(frameon=False,ncol=4,loc='lower right',title='实用单价',bbox_to_anchor=(1, -.06),

fontsize=9)

legend.get_title().set_color('#ffffff')

for text in legend.get_texts():

text.set_color("#ffffff")

#添加必要的文本:这里title也是采用相同方法

ax.text(.5,1.05,"香港在售二手房分布图",transform = ax.transAxes,color="white",weight='bold',size=20,

ha='center', va='center')

ax.text(.5,.985,'数据来源:菜J学Python',transform = ax.transAxes,

ha='center', va='center',fontsize = 10,color='white')

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

ha='center', va='center',fontsize = 8,color='white')

plt.savefig('hk_charts.png',width=8,height=8,

dpi=900,bbox_inches='tight',facecolor='#323332')

#ax.set_axisbelow(True)

plt.show()

可视化效果:

adjustText 库解决文本重叠问题

大家可能发现:结果图中文本较集中,可能对阅读造成不便,我们这里只用adjustText 包进行解决,这里给出文本添加的代码,其他步骤一样:

from adjustText import adjust_text

# 使用adjustText修正文字重叠现象

new_texts = [ax.text(loc.x,loc.y,label,size=13,color="#0DCFE3") for loc, label in \

zip(hk.geometry.representative_point(),hk.name)]

adjust_text(new_texts,

only_move={'text': 'xy'},)

可视化结果如下:

总结

本期推文介绍了使用geopandas 进行空间绘图,完整代码不是很多,但涉及的知识点较多,希望大家可以掌握。另外,这个房价的数据是基于爬虫获取,大家对于如“数据获取-数据处理分析-数据可视化” 等一个完整的项目流程感觉怎样?如果受众较大,我后面也会针对性的进行推文准备的,大家可以在 读者讨论 区讨论留言。

推荐阅读

python地图标点_python绘图 | 空间地图上散点气泡绘制相关推荐

  1. 哪一项不是python的优点_Python有哪些技术上的优点?比其他语言好在哪儿?

    作者:马克·卢茨(Mark Lutz) 本文经授权转自:大数据(ID:hzdashuju) 导读:本文是对Python一些最优的技术特性的快速介绍,以解答初学者关心的问题并消除他们最常见的疑惑. 01 ...

  2. python 等高线地图 处理_python中不规则网格上地图覆盖等高线

    这是我的数据:Lon Lat Z Z2 pos 32.6 -13.6 41 9 CHIP 27.1 -16.9 43 12 CHOM 32.7 -10.2 46 14 ISOK 24.2 -13.6 ...

  3. python下载谷歌地图瓦片_python获取bing地图发布自己的TMS服务(一)下载瓦片

    部分结果 bing地图瓦片使用QuadKey作为命名方式. QuadKey简介 如何计算quadkey 在给定level下,把行号tileY和列号tileX转换为2进制,然后行列交叉存储,再转换为4进 ...

  4. python爬取百度地图数据_Python利用百度地图爬取商家信息

    import requests import json import pandas as pd def request_hospital_data(): ak="换成自己的 AK" ...

  5. python echarts接口_python绘图pyecharts+pandas的使用详解

    pyecharts介绍 pyecharts 是一个用于生成 Echarts 图表的类库.Echarts 是百度开源的一个数据可视化 JS 库.用 Echarts 生成的图可视化效果非常棒 为避免绘制缺 ...

  6. 小程序地图标点,h5腾讯地图标点,vue使用腾讯地图,腾讯地图自定义图标

    很多项目都用到了腾讯地图,不管是小程序还是h5,记录一下使用过程! 1.先到腾讯地图官网点击注册注册登陆 准备工作 先到腾讯地图官网点击注册注册登陆 进入控制台申请key,根据自己的实际情况选择key ...

  7. python的全称_python名称空间介绍

    python名称空间介绍 名称空间 python 中名称空间分三种: 内置名称空间 全局名称空间 局部名称空间 内置名称空间: 原码里面的一些函数都是存在这个内存空间中,任何模块均可访问它,它存放着内 ...

  8. python bokeh模块_Python 绘图 – Bokeh 初探

    背景 想了解一下 python 中的几个绘图工具,及其应用场景.bokeh 为其一. 先放一段 Bokeh 的 Vision:Bokeh is an interactive visualization ...

  9. python 抠图 锯齿_Python | 绘图中的抗锯齿

    python 抠图 锯齿 Antialiasing is another important feature of Matplotlib and in this article, we will re ...

最新文章

  1. react 打包后,项目部署完毕,刷新页面报错(404)
  2. 【NAACL2021】Graph4NLP:图深度学习自然语言处理(附ppt)
  3. linux 文件访问控制 特殊权限 suid,sgid,sbit
  4. 正直、智慧、成熟、诚信——毒霸用人的基本原则
  5. 如何定义一个只能在堆上(栈上)生成对象的类?
  6. postgresql9.5 run 文件linux安装后配置成开机服务
  7. ECharts 学习笔记
  8. 【BZOJ1037】【codevs1410】生日聚会,DP
  9. 驱动AI产业“第二增长曲线”,清华系RealAI发布首个企业级隐私保护机器学习平台与升级版AI模型杀毒软件
  10. 微信小程序 图片长按识别功能 笔记
  11. 数值计算作业:Guass列选主元消去法解线性方程组
  12. python打字_Python编写打字训练小程序
  13. Charles 抓包原理与实践
  14. 万字详解 阿里面试真题:请你说说索引的原理
  15. 两种方法教你修改MAC地址 !
  16. 普迪文集团:马来西亚留学必须了解的7个真相
  17. 【转】SD Card - UHS-I UHS Speed Class 1
  18. 关于javascript的功能无法识别功能问题(引入jquery误操作和以及jquery对id的调取)
  19. fedora如何下载软件
  20. 函数、包,字符串处理,错误处理

热门文章

  1. Apache Kafka教程
  2. echarts中国数据
  3. 超级美味的大盘鸡做法
  4. mysql sql语句优化面试_面试不要一把梭了,这才是SQL优化的正确姿势
  5. MySQL的主动优化和被动优化_不要一把梭了,这才是SQL优化的正确姿式!|原创干货...
  6. 安装autotools系列工具
  7. 计算机考研复试C语言最强简单题资料
  8. 瓦片地图之MBTile数据库
  9. Keil5 : No Target Connected解决方法
  10. Mac Docker镜像源修改