python绘制不同风格的分级统计图(Choropleth map)

  • 前言
  • 所需python第三方库
  • folium自定义地图样式
  • 准备区域轮廓经纬度数据
  • 绘制Choropleth map[^2]

前言

  folium是JavaScript下一个有名的开源库leaflet在python下的移植版,其内置了许多强大的地图自定义功能,本文将用它实现自定义地图样式及自定义区域的分级统计图(Choropleth map)。

所需python第三方库

  • pandas
  • numpy
  • geojson
  • folium

folium自定义地图样式

  folium的默认地图是OpenStreetMap,但说实话,这个地图不是那么美观,它同时也提供了几个内置的风格迥异的地图样式,可惜也不合我胃口。好在folium提供了自定义地图样式的功能,只要拥有地图瓦片(tile)的地址,我们就可自定义地图样式及风格,代码如下

import foliummap = folium.Map(location=[39.30029918615029, 103.88671875], # 初始化地图中心zoom_start=4,# 初始化放大级别# 设置地图样式,可选择其他瓦片(tile)tiles=('https://api.tiles.mapbox.com/v4/mapbox.streets/{z}/{x}/{y}.png'+ '?access_token=pk.eyJ1IjoibHVrYXNtYXJ0aW5lbGxpIiwiYSI6ImNpem8'+ '5dmhwazAyajIyd284dGxhN2VxYnYifQ.HQCmyhEXZUTz3S98FMrVAQ'),attr='China' # 显示在地图右下角的自定义文字
)
# map # 在jupyter使用这句可直接显示地图
map.save('map.html') # 保存到当前工作目录下

  效果如下

  这里提供几个瓦片地址

  • Mapbox:https://api.tiles.mapbox.com/v4/mapbox.streets/{z}/{x}/{y}.png?access_token={此处填mapbox的token,需注册,也可直接使用上面代码中的token}

  • 高德:http://wprd0{1-4}.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=7,{1-4}表示从1到4任选一个数字填入,参数意义参考https://blog.csdn.net/qq_35732147/article/details/81317693

  • 谷歌:http://www.google.cn/maps/vt?lyrs=m@189&gl=cn&x={x}&y={y}&z={z},更多风格参考https://blog.csdn.net/qq_16064871/article/details/78869326

准备区域轮廓经纬度数据

  如果你已经有了geojson格式的数据以及各个区域的统计值之类的数据(用于控制颜色深浅),那么可以按照类似如下操作将该数据转换为绘制所需格式的geojson数据:

import geojson
from geojson import Feature, FeatureCollection, Polygon
import numpy as npwith open('district.geojson', 'rb') as f:districts = geojson.load(f) # 读取geojson格式文件
features = [] # 保存各个区域geojson信息
color = [] # 保存区域id及对应颜色深浅相对值
for idx, geometry in enumerate(districts['features']): # 提取所有区域# 获取经纬度列表[[lon, lat], ...],两次[0]是由于该列表被嵌套在两层列表中circle = geometry['geometry']['coordinates'][0][0]#染色区域id,颜色相对深度, 这里设置为0~100的随机数color.append([str(idx), np.random.randint(100)]) polygon = Polygon([circle]) # 区域经纬度features.append(Feature(id=str(idx), # 指定geojson的id值,染色时使用该id与color中的idx匹配geometry=polygon ))
feature_collection = FeatureCollection(features) # 生成绘制所需格式的geojson

  这里提供两个获取geojson的网站:

  • 获取行政区域geojson:http://datav.aliyun.com/tools/atlas/
  • 自定义区域geojson:http://geojson.io

绘制Choropleth map1

  数据准备完成之后,可以开始绘制Choropleth map了,代码如下:

import folium
import pandas as pdmap = folium.Map(location=[39.30029918615029, 103.88671875], # 初始化地图中心zoom_start=4,# 初始化放大级别# 设置地图样式,可选择其他瓦片(tile)tiles=('https://api.tiles.mapbox.com/v4/mapbox.streets/{z}/{x}/{y}.png'+ '?access_token=pk.eyJ1IjoibHVrYXNtYXJ0aW5lbGxpIiwiYSI6ImNpem8'+ '5dmhwazAyajIyd284dGxhN2VxYnYifQ.HQCmyhEXZUTz3S98FMrVAQ'),attr='China' # 显示在地图右下角的自定义文字
)folium.Choropleth(geo_data=feature_collection, # 传入geojsonname='choropleth',data=pd.DataFrame(color, columns=['idx','color']), # 颜色数据columns=['idx','color'], # 染色区域id,颜色相对深度列名key_on='feature.id', # geojson区域idfill_color='BuPu', # 颜色样式fill_opacity=0.5, # 区域透明度line_opacity=0.2,  # 边缘透明度legend_name='Rank' #图例名
).add_to(map)
# map # 在jupyter使用这句可直接显示地图
map.save('map.html') # 保存到当前工作目录下

  这里我使用的是中国各省的geojson格式文件,最终效果如下
  效果如下


2020.01.03更新:补充代码中未导入的库,更换mapbox token修复token失效导致的加载地图失败


  1. folium示例:http://python-visualization.github.io/folium/quickstart.html#Choropleth-maps
    folium API:http://python-visualization.github.io/folium/modules.html#module-folium.features ↩︎

python绘制不同风格的分级统计图(Choropleth map)相关推荐

  1. 用Python绘制百度风格地图

    先看下面三张图: 如果不仔细看,大家会觉得几乎是一模一样的--起码从风格上看,是一样的. 上面三张图,左边是从百度地图网站上直接截取的图片,而右边是用Python直接绘制出来的数据. 可以明显的看出来 ...

  2. Python绘制地图神器,上手直接开大!

    来源:凹凸数据 之前给大家介绍过多种Python可视化模块,但使用他们进行地理可视化都很简陋. 所以想要绘制更精美的可视化地图?想在地图上自由的设置各种参数?想获得灵活的交互体验? 今天它就来了,Py ...

  3. Python绘制地图神器folium介绍及安装使用教程

    之前给大家介绍过多种Python可视化模块,但使用他们进行地理可视化都很简陋. 所以想要绘制更精美的可视化地图?想在地图上自由的设置各种参数?想获得灵活的交互体验? 今天它就来了,Python绘制地图 ...

  4. python能绘制统计图吗-使用Python绘制图表大全总结

    在使用Python绘制图表前,我们需要先安装两个库文件numpy和matplotlib. Numpy是Python开源的数值计算扩展,可用来存储和处理大型矩阵,比Python自身数据结构要高效:mat ...

  5. 用python绘制柱状图标题-使用Python绘制柱形竞赛图

    我们经常看到的Bar Chart Race(柱形竞赛图),可以看到数据的呈现非常的直观.今天就一起来学习下如何生成和上面一样的柱形竞赛图. 1.导入Python库 Python 1 2 3 4 5im ...

  6. python画椭圆-python绘制圆和椭圆

    源自:https://blog.csdn.net/petermsh/article/details/78458585 1. 调用包函数绘制圆形Circle和椭圆Ellipse from matplot ...

  7. glide加载gif图不显示动画_用Python绘制会动的柱形竞赛图

    我们经常看到的Bar Chart Race(柱形竞赛图),可以看到数据的呈现非常的直观.今天就一起来学习下如何生成和上面一样的柱形竞赛图. 1.导入Python库 2.加载数据集 这里使用的是城市人口 ...

  8. python画50个图-python绘制多个子图的实例

    python绘制多个子图的实例 绘制八个子图 import matplotlib.pyplot as plt fig = plt.figure() shape=['.','o','v','>', ...

  9. [数据分析与可视化] Python绘制数据地图2-GeoPandas地图可视化

    本文主要介绍GeoPandas结合matplotlib实现地图的基础可视化.GeoPandas是一个Python开源项目,旨在提供丰富而简单的地理空间数据处理接口.GeoPandas扩展了Pandas ...

最新文章

  1. Scrapy_redis框架原理分析并实现断点续爬以及分布式爬虫
  2. 解决ReSharper自动删除换行
  3. 20_集合_第20天(Map、可变参数、Collections)
  4. 如何在present出来的viewController里使用push方法
  5. Java-异常01 Error和Exception
  6. Netty 从源码的角度深入剖析 ByteBuffer
  7. 计算机科学与技术 net,计算机科学与技术
  8. I.MX6 android 获取framebuffer信息
  9. AMD、CMD和Common规范
  10. 性能优化大牛 Brendan Gregg 的新书要来了
  11. 【bzoj4567】[Scoi2016]背单词 贪心+trie树
  12. 专业术语 EVT、DVT、PVT的含义
  13. 基于matlab振动信号处理,基于PC及MATLAB的振动信号处理的实现
  14. leetcode1306
  15. easypoi导出word文档,字段是空值、null导出空白到模板
  16. 镜头光学指标介绍----清晰度SFR/MTF
  17. 如何解决QQ在线客服未启用问题
  18. Queue:愿你历尽千帆,归来仍是少年!
  19. 抖音美妆教学领域人设如何打造?几个建议送给你
  20. 天灾 经典 定义31-46译本对照——哥德尔读后之十五

热门文章

  1. 计算机网盘变成红色是怎么回事,电脑小知识:硬盘变红了会带来哪些危害?
  2. 前沿科技探究之AI在索引推荐的应用
  3. Arch Linux折腾记
  4. PDPS软件:带颜色的机器人工作站二维布局图JT格式文件转换方法
  5. python汇率换算程序_Python第六课 汇率兑换4.0
  6. qt 获取当前程序运行路径_Qt 程序获取程序所在路径、用户目录路径、临时文件夹等特殊路径的方法...
  7. 整理《我三年开发经验,从字节跳动抖音组离职后,一口气拿到15家公司Offer》
  8. python 哪些比赛-国内数据挖掘比赛有哪些?
  9. mysqld: Can't create/write to file 'D:
  10. 积水成渊之python——os.path.join()