作者:费弗里

来源:Python大数据分析

1 简介

基于Python中诸如matplotlib等功能丰富、自由度极高的绘图库,我们可以完成各种极富艺术感的可视化作品,关于这一点我在系列文章在模仿中精进数据可视化中已经带大家学习过很多案例了。

而今天我要给大家介绍的这个Pythonprettymaps非常的有趣,基于它,我们只需要简单的代码就可以对地球上给定坐标和范围的任意地区进行地图可视化????。

2 利用prettymaps快速制作海报级地图

遗憾的是,prettymaps暂时还不能通过pipconda直接进行安装,但可以利用pip配合git从源码仓库进行安装,对于国内的用户来说,可以使用下面的语句从github的镜像地址快速安装:

pip install git+https://hub.fastgit.org/marceloprates/prettymaps.git

安装完成后,如果下面的语句执行无误,那么恭喜你已经安装完成:

from prettymaps import *

2.1 prettymaps的几种使用方式

prettymaps无需用户自行准备数据,会根据用户设定的坐标和范围大小来自动从OpenStreetMap上获取相应范围内的矢量数据作为绘图素材,主要有以下几种使用方式:

2.1.1 圆形模式

prettymaps中最简单的绘图模式为「圆形模式」,我们只需要传入中心点经纬度坐标,以及半径范围(单位:米)即可,下面的例子来自官方示例程序,我将其地点换成以上海外滩为中心向外2500米范围:

from prettymaps import *
from matplotlib import pyplot as plt# 创建图床
fig, ax = plt.subplots(figsize = (12, 12), constrained_layout = True)layers = plot((31.23346, 121.492154), # 圆心坐标,格式:(纬度, 经度)radius = 2500, # 半径ax = ax, # 绑定图床layers = {'perimeter': {}, # 控制绘图模式,{}即相当于圆形绘图模式# 下面的参数用于定义从OsmStreetMap选择获取的矢量图层要素,不了解的无需改动照搬即可'streets': {'custom_filter': '["highway"~"motorway|trunk|primary|secondary|tertiary|residential|service|unclassified|pedestrian|footway"]','width': {'motorway': 5,'trunk': 5,'primary': 4.5,'secondary': 4,'tertiary': 3.5,'residential': 3,'service': 2,'unclassified': 2,'pedestrian': 2,'footway': 1,}},'building': {'tags': {'building': True, 'landuse': 'construction'}, 'union': False},'water': {'tags': {'natural': ['water', 'bay']}},'green': {'tags': {'landuse': 'grass', 'natural': ['island', 'wood'], 'leisure': 'park'}},'forest': {'tags': {'landuse': 'forest'}},'parking': {'tags': {'amenity': 'parking', 'highway': 'pedestrian', 'man_made': 'pier'}}},# 下面的参数用于定义OpenStreetMap中不同矢量图层的样式,嫌麻烦的直接照抄下面的官方示例即可drawing_kwargs = {'background': {'fc': '#F2F4CB', 'ec': '#dadbc1', 'hatch': 'ooo...', 'zorder': -1},'perimeter': {'fc': '#F2F4CB', 'ec': '#dadbc1', 'lw': 0, 'hatch': 'ooo...',  'zorder': 0},'green': {'fc': '#D0F1BF', 'ec': '#2F3737', 'lw': 1, 'zorder': 1},'forest': {'fc': '#64B96A', 'ec': '#2F3737', 'lw': 1, 'zorder': 1},'water': {'fc': '#a1e3ff', 'ec': '#2F3737', 'hatch': 'ooo...', 'hatch_c': '#85c9e6', 'lw': 1, 'zorder': 2},'parking': {'fc': '#F2F4CB', 'ec': '#2F3737', 'lw': 1, 'zorder': 3},'streets': {'fc': '#2F3737', 'ec': '#475657', 'alpha': 1, 'lw': 0, 'zorder': 3},'building': {'palette': ['#FFC857', '#E9724C', '#C5283D'], 'ec': '#2F3737', 'lw': .5, 'zorder': 4},},osm_credit = {'color': '#2F3737'}
)# 导出图片文件
plt.savefig('上海外滩-圆形模式.png', dpi=500)

2.1.2 圆角矩形模式

除了上述的「圆形模式」之外,prettymaps中还可以使用「圆角矩形模式」,同样需要定义中心点坐标和半径,接着为参数layers下的每个键值对添加键值对{'circle': False, 'dilate': 圆角半径}即可,其中圆角半径为数值型,这次我们换一个地方,以故宫为例,半径选择600米:

# 创建图床
fig, ax = plt.subplots(figsize = (12, 12), constrained_layout = True)dilate = 100layers = plot((39.91645697864148, 116.39077532493388), # 圆心坐标,格式:(纬度, 经度)radius = 600, # 半径ax = ax, # 绑定图床layers = {'perimeter': {'circle': False, 'dilate': dilate}, # 控制绘图模式,{}即相当于圆形绘图模式# 下面的参数用于定义从OsmStreetMap选择获取的矢量图层要素,不了解的无需改动照搬即可'streets': {'custom_filter': '["highway"~"motorway|trunk|primary|secondary|tertiary|residential|service|unclassified|pedestrian|footway"]','width': {'motorway': 5,'trunk': 5,'primary': 4.5,'secondary': 4,'tertiary': 3.5,'residential': 3,'service': 2,'unclassified': 2,'pedestrian': 2,'footway': 1,},'circle': False, 'dilate': dilate},'building': {'tags': {'building': True, 'landuse': 'construction'}, 'union': False, 'circle': False, 'dilate': dilate},'water': {'tags': {'natural': ['water', 'bay']}, 'circle': False, 'dilate': dilate},'green': {'tags': {'landuse': 'grass', 'natural': ['island', 'wood'], 'leisure': 'park'}, 'circle': False, 'dilate': dilate},'forest': {'tags': {'landuse': 'forest'}, 'circle': False, 'dilate': dilate},'parking': {'tags': {'amenity': 'parking', 'highway': 'pedestrian', 'man_made': 'pier'}, 'circle': False, 'dilate': dilate}},# 下面的参数用于定义OpenStreetMap中不同矢量图层的样式,嫌麻烦的直接照抄下面的官方示例即可drawing_kwargs = {'background': {'fc': '#F2F4CB', 'ec': '#dadbc1', 'hatch': 'ooo...', 'zorder': -1},'perimeter': {'fc': '#F2F4CB', 'ec': '#dadbc1', 'lw': 0, 'hatch': 'ooo...',  'zorder': 0},'green': {'fc': '#D0F1BF', 'ec': '#2F3737', 'lw': 1, 'zorder': 1},'forest': {'fc': '#64B96A', 'ec': '#2F3737', 'lw': 1, 'zorder': 1},'water': {'fc': '#a1e3ff', 'ec': '#2F3737', 'hatch': 'ooo...', 'hatch_c': '#85c9e6', 'lw': 1, 'zorder': 2},'parking': {'fc': '#F2F4CB', 'ec': '#2F3737', 'lw': 1, 'zorder': 3},'streets': {'fc': '#2F3737', 'ec': '#475657', 'alpha': 1, 'lw': 0, 'zorder': 3},'building': {'palette': ['#FFC857', '#E9724C', '#C5283D'], 'ec': '#2F3737', 'lw': .5, 'zorder': 4},},osm_credit = {'color': '#2F3737'}
)# 导出图片文件
plt.savefig('北京故宫-圆角矩形模式.png', dpi=500)

2.1.3 添加文字内容

有了这样美观大方的艺术地图,我们还可以基于matplotlib中自定义字体的方法,在地图上添加标注信息,仍然以上海外滩为例,我们利用外部的书法字体,在正中心绘制文字标注信息:

import matplotlib.font_manager as fm# 创建图床
fig, ax = plt.subplots(figsize = (12, 12), constrained_layout = True)layers = plot((31.23346, 121.492154), # 圆心坐标,格式:(纬度, 经度)radius = 2500, # 半径ax = ax, # 绑定图床layers = {'perimeter': {}, # 控制绘图模式,{}即相当于圆形绘图模式# 下面的参数用于定义从OsmStreetMap选择获取的矢量图层要素,不了解的无需改动照搬即可'streets': {'custom_filter': '["highway"~"motorway|trunk|primary|secondary|tertiary|residential|service|unclassified|pedestrian|footway"]','width': {'motorway': 5,'trunk': 5,'primary': 4.5,'secondary': 4,'tertiary': 3.5,'residential': 3,'service': 2,'unclassified': 2,'pedestrian': 2,'footway': 1,}},'building': {'tags': {'building': True, 'landuse': 'construction'}, 'union': False},'water': {'tags': {'natural': ['water', 'bay']}},'green': {'tags': {'landuse': 'grass', 'natural': ['island', 'wood'], 'leisure': 'park'}},'forest': {'tags': {'landuse': 'forest'}},'parking': {'tags': {'amenity': 'parking', 'highway': 'pedestrian', 'man_made': 'pier'}}},# 下面的参数用于定义OpenStreetMap中不同矢量图层的样式,嫌麻烦的直接照抄下面的官方示例即可drawing_kwargs = {'background': {'fc': '#F2F4CB', 'ec': '#dadbc1', 'hatch': 'ooo...', 'zorder': -1},'perimeter': {'fc': '#F2F4CB', 'ec': '#dadbc1', 'lw': 0, 'hatch': 'ooo...',  'zorder': 0},'green': {'fc': '#D0F1BF', 'ec': '#2F3737', 'lw': 1, 'zorder': 1},'forest': {'fc': '#64B96A', 'ec': '#2F3737', 'lw': 1, 'zorder': 1},'water': {'fc': '#a1e3ff', 'ec': '#2F3737', 'hatch': 'ooo...', 'hatch_c': '#85c9e6', 'lw': 1, 'zorder': 2},'parking': {'fc': '#F2F4CB', 'ec': '#2F3737', 'lw': 1, 'zorder': 3},'streets': {'fc': '#2F3737', 'ec': '#475657', 'alpha': 1, 'lw': 0, 'zorder': 3},'building': {'palette': ['#FFC857', '#E9724C', '#C5283D'], 'ec': '#2F3737', 'lw': .5, 'zorder': 4},},osm_credit = {'color': '#2F373700'}
)# 添加文字标注
ax.text(0.5, 0.5,'外滩, 上海',zorder = 6,ha='center',va='center',fontsize=120,fontproperties = fm.FontProperties(fname='FZZJ-HLYHXSJW.TTF'),transform=ax.transAxes
)# 导出图片文件
plt.savefig('上海外滩-添加文字标注.png', dpi=500)

你可以找到你关注地点的经纬度坐标,尽情地绘制出各种艺术地图作品,譬如下面这些地标:


以上就是本文的全部内容,欢迎在评论区与我进行讨论~

用 Python 快速制作海报级地图相关推荐

  1. 用Python快速制作海报级地图

    1 简介 基于Python中诸如matplotlib等功能丰富.自由度极高的绘图库,我们可以完成各种极富艺术感的可视化作品,关于这一点我在系列文章在模仿中精进数据可视化中已经带大家学习过很多案例了.而 ...

  2. 用Python快速制作海报级地图!

    我是小z 今天给大家分享一篇地图可视化干货(没出去玩的同学,国庆节也要卷起来啊) 1 简介 基于Python中诸如matplotlib等功能丰富.自由度极高的绘图库,我们可以完成各种极富艺术感的可视化 ...

  3. 利用Python快速绘制海报级别地图

    利用Python快速绘制海报级别地图 1.简介 2.利用prettymaps快速制作海报级地图 2.1 prettymaps的几种使用方式 2.1.1 圆形模式 2.1.2 圆角矩形模式 2.1.3 ...

  4. 如何快速制作OruxMaps离线地图

    如何快速制作OruxMaps离线地图 Oruxmaps作为一款非常强大的户外gps导航软件,可以实现离线地图导航,在没有手机信号.飞行模式下都可以正常导航:同时功能强大,可以自定义离线地图,支持记录/ ...

  5. 代码详解:如何用Python快速制作美观、炫酷且有深度的图表

    全文共12231字,预计学习时长35分钟 生活阶梯(幸福指数)与人均GDP(金钱)正相关的正则图 本文将探讨三种用Python可视化数据的不同方法. 以可视化 <2019年世界幸福报告> ...

  6. python,制作山东省的地图 热力图

    python制作一个山东省的地图热力图.可以这么做. ################################################################### ##### ...

  7. python可视化报表制作教程_如何使用Python快速制作可视化报表

    数据可视化能力已经越来越成为各岗位的基础技能.领英的数据报告显示,数据可视化技能在2017年中国最热门技能中排名第一. 就数据分析而言,可视化探索几乎是你正式进行数据分析的第一步,通过SQL拿到数据之 ...

  8. python快速制作倒计时gif图

    这是我在整理以前python的代码,所以代码解释的不是很多,我自己随手添加了一点. 方便你更好的理解代码,我将vscode目录结构图放上. import imageio from moviepy.ed ...

  9. python报表设计控件_使用Python快速制作可视化报表

    我们可以试用可视化包--Pyechart. Echarts是百度开源的一个数据可视化JS库,主要用于数据可视化. pyecharts是一个用于生成Echarts图标的类库.实际就是Echarts与Py ...

最新文章

  1. 折纸计算机大全,神之折纸电脑版
  2. 如何选择适合自己公司的移动办公系统?
  3. java压缩文件太慢_java 解压6万个ZIP文件,如何提升速度?
  4. 黑苹果macOS Catalina 10.15.4 安装过程详细记录
  5. ZZULIOJ/python1006: 求等差数列的和
  6. 揭秘无聊程序猿的趣味人生|斑鸠职业
  7. Java中Scanner的进阶---求和与求平均数
  8. ipad显示portal服务器获取不,苹果portal认证失败原因合集
  9. luogu P3934 [Ynoi2016] 炸脖龙 I
  10. 360做专业手机电商平台还是有搞头
  11. 优动漫PAINT漫画和插画方面软件特色
  12. 7、TM4单片机学习之串口功能
  13. 003竞品分析的思考、理解和一些框架
  14. 无人机、手持全景设备、单反制作全景的基础流程,及全景成果与地图融合
  15. matlab同轴电缆能量密度,冯慈璋马西奎工程电磁场导论课后重点习题目解答.doc...
  16. 忽略链路状态的功能详解——网络测试仪实操
  17. P1185 绘制二叉树——蒟蒻的暴力模拟
  18. 这10家公司,瓜分了中国10万亿线下零售额
  19. 【重庆SEO教程】如何诊断一个网站SEO优化的好坏
  20. Access.2007数据库开发全书(奋斗的小鸟)_PDF 电子书

热门文章

  1. 【Hello CSS】第一章-CSS的语法与工作流
  2. 几何画板画一个五边形内部的方法
  3. Python fabric实现远程操作和部署
  4. asp.net 2.0中新增的AppendDataBoundItems .dropdownlist 添加第一项
  5. 编译android不再需要jdk1.5
  6. 为什么java退出全屏_Java全屏模式与退出全屏:
  7. Ubuntu管理开机自启动程序
  8. OEM, ODM, OBM
  9. elementui 清空下拉框值_element中的select如何在下拉数据改变后清空之前的选择?...
  10. 暑期集训3:几何基础 练习题F:  CodeForces - 1007A ​​​​​​​