python海报设计,python做地图
基于Python的matplotlib等功能丰富、自由度高的图形库,可以完成各种艺术可视化作品。我在一系列关于模仿中的数据可视化的文章中已经带您学习了许多关于这方面的案例。
00-10101简介2使用prettymaps快速制作海报级地图Pretty Maps的几种使用方法2.1.1圆形模式2.1.2圆角矩形模式2.1.3在末尾添加文字内容:
目录
我今天要给大家介绍的Python库prettymaps很有意思。基于它,我们只需要简单的代码就可以用给定的坐标和范围来可视化地球上的任何区域。
1 简介
遗憾的是,prettymaps暂时不能通过pip或conda直接安装,但可以通过pip配合git从源码库中安装。对于国内用户,可以使用以下语句从github的镜像地址快速安装:
pip安装git https://hub.fastgit.org/marceloprates/prettymaps.git
安装完成后,如果正确执行了以下语句,那么恭喜安装成功:
来自prettymaps import *
2 利用prettymaps快速制作海报级地图
Prettymaps不需要用户自己准备数据,会根据用户设置的坐标和范围大小,自动从OpenStreetMap中获取相应范围内的矢量数据作为绘图素材。主要有以下几种使用方法:
2.1 prettymaps的几种使用方式
prettymaps中最简单的绘制模式是“圆形模式”。我们只需要传入中心点的经纬度坐标,以及半径范围(单位:米)。下面的例子来自官方的示例程序。我把它的位置改到了离上海外滩2500米的范围内:
来自prettymaps import *
从matplotlib导入pyplot作为plt
#创建婴儿床
fig,ax=plt.subplots(figsize=(12,12),constrained_layout=True)
图层=绘图(
(31.23346,121.492154),#中心坐标,格式:(纬度,经度)
半径=2500,#半径
Ax=ax,#绑定图形床
层={
周长 3360 {},#控制绘图模式,{}相当于圆形绘图模式。
#以下参数用于定义从OsmStreetMap中选取的矢量图层元素,不知道的可以不加修改复制。
街道: {
custom _ filter : [ highway ~ automobile trunk primary secondary thirty residential service unclassified speedy footway ],
宽度 : {
: 5号高速公路,
后备箱: 5,
初级 : 4.5,
中学 : 4,
第三级 : 3.5,
住宅 : 3,
服务 : 2,
未分类
ed: 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"~"motorwaytrunkprimarysecondarytertiaryresidentialserviceunclassifiedpedestrianfootway"],
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"~"motorwaytrunkprimarysecondarytertiaryresidentialserviceunclassifiedpedestrianfootway"],
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 地图海报内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。