本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

以下文章来源于DataCharm ,作者宁海涛

前言

今天的推文教程使用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,"Visualization 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 inzip(hk.geometry.representative_point(),hk.name):

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

结果如下:

添加气泡散点数据

由于数据的经纬度是直接基于高德地图进行解析的,导致存在部分数据经纬度信息出错,我们使用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 inlegend.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 inzip(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 inlegend.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,"Visualization 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 importadjust_text#使用adjustText修正文字重叠现象

new_texts = [ax.text(loc.x,loc.y,label,size=13,color="#0DCFE3") for loc, label inzip(hk.geometry.representative_point(),hk.name)]

adjust_text(new_texts,

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

可视化结果如下:

python气泡图的地图_Python数据可视化:香港地图、房价可视化,绘制气泡图相关推荐

  1. python画熊猫论文_Python数据可视化之美:专业图表绘制指南(全彩)

    Python数据可视化之美:专业图表绘制指南(全彩)电子书 系统性地介绍Python 的绘图语法系统,包括matplotlib.Seaborn.plotnine 包,以及用于地理空间数据可视化的Bas ...

  2. python前端框架实例_Python数据可视化:PyQt5 + ECharts框架实例

    引言 对于Python下桌面软件的开发已经有了很多数据可视化的库,如Matplotlib.Seaborn.Pyqtgraph.Plotly等等,但这些库更适合于后端程序员的软件开发. 实际上在前端网页 ...

  3. python matplotlib 地图_Python数据可视化,看这篇就够了

    说到python的常见应用,很多人会想到python的数据分析,作为数据分析中的表现层面,数据可视化都是其中必不可少的部分.但本文并非只推荐无任何数据分析需求仅需要做漂亮可视化图表的人学习python ...

  4. python三维图能画地图_Python数据可视化:3D动态图,让你的足迹实现在地图上

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 以下文章来源于python数据分析之禅 ,作者小dull鸟 今天给大家带来一篇3 ...

  5. python动态图表变化_Python数据可视化 pyecharts实现各种统计图表过程详解

    Python数据可视化 pyecharts实现各种统计图表过程详解 发布时间:2020-09-10 04:53:26 来源:脚本之家 阅读:78 1.pyecharts介绍 Echarts是一款由百度 ...

  6. python pyecharts 折线图_Python数据可视化之pyecharts实现各种图表

    之前的一篇文章介绍了使用Matplotlib实现各种统计图表,Python数据可视化之Matplotlib实现各种图表.这篇文章就介绍使用pyecharts实现各种统计图表. 1.pyecharts介 ...

  7. python生成热度图_Python数据可视化 热力图

    不要停止奔跑,不要回顾来路,来路无可眷恋,值得期待的只有前方.--<马男波杰克> ​​​​ 一.matplotlib绘制热力图 Matplotlib是Python著名的2D绘图库,该库仿造 ...

  8. python画误差图_Python数据可视化:如何创建误差图

    一图胜千言,使用Python的matplotlib库,可以快速创建高质量的图形. 这是Python数据可视化的系列短篇,针对初级和中级用户,将理论和示例代码相结合,使用matplotlib, seab ...

  9. python蜡烛图预测_Python数据可视化:如何用mplfinance创建蜡烛图

    一图胜千言,使用Python的matplotlib库,可以快速创建高质量的图形. 我们团队推出一个新的系列教程:Python数据可视化,针对初级和中级用户,将理论和示例代码相结合,使用matplotl ...

最新文章

  1. 信息解码(Message Decoding)ACM题目
  2. 团队作业4——第一次项目冲刺(Alpha版本)-第一篇
  3. C++ Primer 5th笔记(2)chapter 2变量和基本类型
  4. 并发基础(八) java线程的中断机制
  5. access port 与portfast之间的关系
  6. Maven项目缺少Maven Dependencies解决方法
  7. java match parent_java.lang.IllegalStateException: The specified child already has a parent
  8. 查python的软件_Python制作天气查询软件【python实战必学】
  9. mysql编译安装vs20156_Linux上安装JDK1.8,tomcat9,以及mysql8的步骤
  10. tensorflow 变量共享
  11. 重启windows资源管理器命令
  12. Ubuntu下的几种常见输入法极其配置方式
  13. 强大的网页数据库管理工具Adminer
  14. 解决office2016显示图标异常
  15. 使用pscc抠人物图像头发
  16. Kinect绿灯闪烁解决方法
  17. python运行出现OSError: [WinError 87] 参数错误。
  18. 流程图设计(html+css+js)
  19. 【2019保研经验】清华贵系、清华软院、北大叉院、中科院自动化所等
  20. 关于数据库事务隔离级别的介绍

热门文章

  1. 《知识的边界》读书笔记
  2. 二维码生成与解析代码实现
  3. TTFB-首字节时间简介
  4. iOS播放音乐与播放系统声音
  5. 微信小程序生成小程序码的方法
  6. 北大肖臻老师《区块链技术与应用》系列课程学习笔记[1]Bitcoin中用到的密码学原理和数据结构
  7. java面试答题软件,Java面试题库
  8. 委外PR的BOM清单导出
  9. Kotlin 代码生成 之 kotlinpoet 使用
  10. TP与laravel简介