如何利用Python快速绘制海报级别地图详解

目录
  • 1 简介
  • 2 利用prettymaps快速制作海报级地图
    • 2.1 prettymaps的几种使用方式
      • 2.1.1 圆形模式
      • 2.1.2 圆角矩形模式
      • 2.1.3 添加文字内容
  • 总结

1 简介

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

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

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

遗憾的是,prettymaps暂时还不能通过pip或conda直接进行安装,但可以利用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 = 100

layers = 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快速绘制海报级别地图的文章就介绍到这了,更多相关Python绘制海报级地图内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解python 利用echarts画地图(热力图)(世界地图,省市地图,区县地图)

    首先安装对应的python模块 $ pip install pyecharts==0.5.10 $ pip install echarts-countries-pypkg $ pip install echarts-china-provinces-pypkg $ pip install echarts-china-cities-pypkg $ pip install echarts-china-counties-pypkg 世界地图 from pyecharts import Map value

  • python使用pyecharts库画地图数据可视化的实现

    python使用pyecharts库画地图数据可视化导库中国地图代码结果世界地图代码结果省级地图代码结果地级市地图代码结果 导库 from pyecharts import options as opts from pyecharts.charts import Map 中国地图 代码 data = [('湖北', 9074),('浙江', 661),('广东', 632),('河南', 493),('湖南', 463), ('安徽', 340),('江西', 333),('重庆', 275),

  • Python地图绘制实操详解

    网上有很多地图绘制的教程,更多趋向于全国地图或者省级地图,但有时我们需要到县级.闲得慌,今天以贵州省毕节市为例,分享一篇Python县级地图的绘制(遥想当时差点把百度翻了个底朝天),希望对需要的你能有所帮助,如果没看懂,欢迎留言一起交流学习! 1.模块安装 安装所需包--pyecharts.两种安装方式:1.pip install pyecharts:2.从JetBrains PyCharm中 File-->Settings...-->Project-->Project Interpre

  • 代码分析Python地图坐标转换

    最近做项目正好需要坐标的转换 各地图API坐标系统比较与转换; WGS84坐标系:即地球坐标系,国际上通用的坐标系.设备一般包含GPS芯片或者北斗芯片获取的经纬度为WGS84地理坐标系, 谷歌地图采用的是WGS84地理坐标系(中国范围除外); GCJ02坐标系:即火星坐标系,是由中国国家测绘局制订的地理信息系统的坐标系统.由WGS84坐标系经加密后的坐标系. 谷歌中国地图和搜搜中国地图采用的是GCJ02地理坐标系; BD09坐标系:即百度坐标系,GCJ02坐标系经加密后的坐标系; 搜狗坐标系.图

  • Python学习之用pygal画世界地图实例

    有关pygal的介绍和安装,大家可以参阅<pip和pygal的安装实例教程>,然后利用pygal实现画世界地图.代码如下: #coding=utf-8 import json import pygal.maps.world #Pygal样式保存在模块style中,包括RotateStyle调整颜色和LightColorizedStyle加亮颜色 #也可以写成from pygal.style import LightColorizedStyle, RotateStyle import pygal

  • python实现3D地图可视化

    基于python代码的3D地图可视化,供大家参考,具体内容如下 介绍 使用Python对地图进行3D可视化.以地图为地图,可以在三维空间对轨迹.点进行可视化. 库 我们使用了多个库: 1.gdal: 主要是用于读取地图信息,这个库在GIS中很常用,使用C++代码编写的,如果安装不了需要在pypi里面找一下对应的资源. 2.opencv: 很常用的图像处理库. 3.matplotlib: 常用的可视化库 结果 废话不多说直接上结果: 代码 直接上代码,代码很简单. from osgeo impor

  • python实现Pyecharts实现动态地图(Map、Geo)

    一些经常画图的开发人员大概都用过echart,不过小白用Python比较多,学习了python下的Pyecharts,发现这个包真的很强大.下面是小白对动态地图的实践案例: 假如有这样一组数据,全国每个城市的酒店数(虚拟),那么如何在地图上展示呢? 1.Python需要安装Pycharts 当安装完成后需要添加地图包: 安装pyecharts后还需要根据需要安装城市.省份等地图包,下面是对包的整理,大家可以根据需要下载. pip install pyecharts pip install ech

  • 使用Python实现画一个中国地图

    为什么是Python 先来聊聊为什么做数据分析一定要用Python或R语言.编程语言这么多种,Java, PHP都很成熟,但是为什么在最近热火的数据分析领域,很多人选择用Python语言? 数据分析只是一个需求,理论上来讲,任何语言都可以满足任何需求,只是麻烦与简易之别.Python这门语言诞生也相当之早,它的第一个版本是26年前发表的,曾经(或者说当前)也被用于web开发,但是就流行程度来说,远远干不过Java和PHP.东方不亮西方亮,在与Java干仗失败的这20几年时光里,Python练就了

  • 利用python绘制中国地图(含省界、河流等)

    我们可以使用Basemap这个工具包来实现中国地图的绘制 首先需要加载一些包: import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.basemap import Basemap Basemap包就是气象画图的利器,现在我们就可以愉快的画图了! plt.figure(1) map=Basemap() map.drawcoastlines() plt.title(r'$World\ Map$',fontsize=2

  • 如何利用Python快速绘制海报级别地图详解

    目录 1 简介 2 利用prettymaps快速制作海报级地图 2.1 prettymaps的几种使用方式 2.1.1 圆形模式 2.1.2 圆角矩形模式 2.1.3 添加文字内容 总结 1 简介 基于Python中诸如matplotlib等功能丰富.自由度极高的绘图库,我们可以完成各种极富艺术感的可视化作品,关于这一点我在系列文章在模仿中精进数据可视化中已经带大家学习过很多案例了. 而今天我要给大家介绍的这个Python库prettymaps非常的有趣,基于它,我们只需要简单的代码就可以对地球

  • 利用Python快速绘制海报地图

    目录 利用Python快速绘制海报地图 1 简介 2.1 prettymaps的几种使用方式 2.1.1 圆形模式 2.1.2 圆角矩形模式 2.1.3 添加文字内容 2 利用prettymaps快速制作海报级地图 利用Python快速绘制海报地图 1 简介 基于Python中诸如matplotlib等功能丰富.自由度极高的绘图库,我们可以完成各种极富艺术感的可视化作品,关于这一点我在系列文章在模仿中精进数据可视化中已经带大家学习过很多案例了. 而今天我要给大家介绍的这个Python库prett

  • 基于Python绘制世界疫情地图详解

    世界疫情数据下载请点击>>:疫情数据下载 注:此数据是2022年3月12号的结果,其中透明的地方代表确诊人数小于10万人,白色的地方代表无该国家的数据. 最终效果: 下载需要的python包: pip install echarts-countries-pypkg pip install echarts-china-provinces-pypkg pip install echarts-countries-china-cities-pypkg import seaborn as sns imp

  • 利用Python创建位置生成器的示例详解

    目录 介绍 开始 步骤 创建训练数据集 创建测试数据集 将合成图像转换回坐标 放在一起 结论 介绍 在这篇文章中,我们将探索如何在美国各地城市的地图数据和公共电动自行车订阅源上训练一个快速生成的对抗网络(GAN)模型. 然后,我们可以通过为包括东京在内的世界各地城市创建合成数据集来测试该模型的学习和概括能力. git clone https://github.com/gretelai/GAN-location-generator.git 在之前的一篇博客中,我们根据电子自行车订阅源中的精确位置数

  • Python实现绘制多种激活函数曲线详解

    利用numpy.matplotlib.sympy绘制sigmoid.tanh.ReLU.leaky ReLU.softMax函数 起因:深度学习途中,老师留一作业,绘制激活函数及其导数,耗时挺久,记录学习过程 准备工作:下载numpy.matplotlib.sympy pip install numpy matplotlib sympy 查找对应库的文档: numpy文档 matplotlib文档 sympy文档 写代码的时候发现vscode不会格式化我的python?查了一下原来还要安装fla

  • matplotlib在python上绘制3D散点图实例详解

    大家可以先参考官方演示文档: 效果图: ''' ============== 3D scatterplot ============== Demonstration of a basic scatterplot in 3D. ''' from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import numpy as np def randrange(n, vmin, vmax): ''' Helper f

  • Python+Turtle绘制航海王草帽路飞详解

    目录 一.程序运行 1.效果展示-轮廓描绘 2.效果展示-颜色填充 二.实现过程 1.绘图数据下载 2.海龟绘图配置项 3.轮廓绘制 4.颜色填充:衣服.裤子 5.颜色填充:草帽.腰带 6.完整源码 一.程序运行 1.效果展示 - 轮廓描绘 看轮廓描绘效果: 2.效果展示 - 颜色填充 衣服和裤子颜色填充效果: 二.实现过程 1.绘图数据下载 获取地址 内容预览: 2.海龟绘图配置项 降低刷新率可提升绘制速度,值越大刷新频率越低,速度越快 t.tracer(5000) def set_trutl

  • Python+Turtle绘制可爱的小蜜蜂详解

    目录 一.效果展示 二.代码详解 1.导入库 2.播放音乐 3.画小蜜蜂的头 4.画脖子和腹部 三.完整代码 公众号中有个朋友私信我,想要帮忙画下小蜜蜂. 答应了有时间就帮忙画下,趁着五一休息,今天就一起来实现一下吧. 一.效果展示 在正式进入代码讲解之前,先来看下本文的实现效果. 感兴趣的朋友可以根据自己的需要调整函数,绘制别的形状的小蜜蜂. 二.代码详解 本小节会详细解锁如何通过Python中的turtle库绘制小蜜蜂. 1.导入库 首先导入本文需要加载的库,如果你有些库还没有安装,导致运行

  • Python+Seaborn绘制分布图的示例详解

    目录 前言 示例 1 示例 2 示例 3 示例 4 示例 5 例子 6 例子 7 示例 8 示例 9 示例10 前言 在本文中,我们将介绍10个示例,以掌握如何使用用于Python的Seaborn库创建图表. 任何数据产品的第一步都应该是理解原始数据.对于成功和高效的产品,这一步骤占据了整个工作流程的很大一部分. 有几种方法用于理解和探索数据.其中之一是创建数据可视化.它们帮助我们探索和解释数据. 通过创建适当和设计良好的可视化,我们可以发现数据中的底层结构和关系. 分布区在数据分析中起着至关重

  • Python Matplotlib绘制动画的代码详解

    目录 matplotlib 动画 人口出生率 男女人口总数 雨滴 matplotlib 动画 我们想制作一个动画,其中正弦和余弦函数在屏幕上逐步绘制.首先需要告诉matplotlib我们想要制作一个动画,然后必须指定想要在每一帧绘制什么.一个常见的错误是重新绘制每一帧的所有内容,这会使整个过程非常缓慢.相反地,只能更新必要的内容,因为我们知道许多内容不会随着帧的变化而改变.对于折线图,我们将使用set_data方法更新绘图,剩下的工作由matplotlib完成. 注意随着动画移动的终点标记.原因

随机推荐