在模仿中精进数据可视化:常见抽象地图的制作

本文介绍了如何使用Python和地理信息系统库,创作三种不同风格的抽象地图:向外环形扩散、像素风格以及泰森多边形拼接。通过设置参数和几何操作,可以轻松定制属于自己的独特地图效果,提升报告或展示的视觉吸引力。
摘要由CSDN通过智能技术生成

1 简介

我们经常会在一些「PPT报告」或者「宣传广告」中看到一些比较抽象的地图,它们都是在正常地图的基础上,通过置换几何元素,来实现出较为抽象的效果,这类的作品非常之多,因此本文不模仿实际的某幅作品,而是制作出下面三类抽象地图:

图1

2 基于Python模仿常见抽象地图

对应图1,我们下面来分别模仿3类抽象地图,首先准备一下要用到的中国地图数据,我们偷个懒直接使用高德开源的地图数据接口:

图2

为了方便和简化之后的运算,我们利用unary_union来将融合所有要素为一个:

图3

这样我们的基础数据就准备好了~

2.1 向外环形扩散的地图

首先我们来制作图1左图所示,从以某个点为圆心,向外环形扩散的地图,原理其实很简单,只需要定义圆心坐标,接着向外按照等差数列,依次扩大半径距离计算缓冲区的轮廓线:

from shapely.geometry import Point
import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(8, 8))

# 以重庆为圆心,生成向外的环形线,间隔为80公里
center = gpd.GeoSeries([Point((106.546737, 29.566598))], crs='EPSG:4326').to_crs(albers_proj)
circles = gpd.GeoSeries([center[0].buffer(i*1000*80).boundary for i in range(1, 45)], crs=albers_proj)

ax = china_total.plot(ax=ax, facecolor='none', edgecolor='black')
ax = circles.plot(ax=ax)

图4

可以看到目前生成的环形线已经可以覆盖中国全境,最后用china_total来裁剪即可:

fig, ax = plt.subplots(figsize=(8, 8))

# 用china_total作为蒙版从circles中裁切出绘图所需部分
ax = gpd.clip(circles, mask=china_total).plot(ax=ax, color='white')

ax.set_facecolor('#4a4db7')

fig.set_facecolor('#4a4db7')

ax.set_xticks([])
ax.set_yticks([])

ax.spines['left'].set_color('none')
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
ax.spines['bottom'].set_color('none')

fig.savefig('图5.png', dpi=500, bbox_inches='tight', pad_inches=0)
图5

在这幅图的基础上,你就可以添加其他的文字标注等元素,形成配图,使得你的报告更加高级。

2.2 像素风格地图

接着我们来制作图1中图所示的由方块组成的像素风格地图,原理也很简单,生成覆盖china_total范围的网格:

from shapely.geometry import MultiLineString
from shapely.ops import polygonize # 用于将交叉线转换为网格面
import numpy as np

# 提取china_total左下角与右上角坐标
xmin, ymin, xmax, ymax = china_total.total_bounds
xmin, ymin, xmax, ymax = int(xmin), int(ymin), int(xmax), int(ymax)

# 创建x方向上的所有坐标位置,间距50公里
x = np.arange(xmin, xmax, 50*1000)

# 创建y方向上的所有坐标位置,间距50公里
y = np.arange(ymin, ymax, 50*1000)

# 生成全部交叉线坐标信息
hlines = [((x1, yi), (x2, yi)) for x1, x2 in zip(x[:-1], x[1:]) for yi in y]
vlines = [((xi, y1), (xi, y2)) for y1, y2 in zip(y[:-1], y[1:]) for xi in x]

grids = gpd.GeoSeries(list(polygonize(MultiLineString(hlines + vlines))), crs=albers_proj)
grids.plot(facecolor='none', edgecolor='black')
图6

再向内缓冲一定的距离,即可得到结果:

图7

2.3 由不规则多边形拼凑的地图

最后我们来制作图1右图所示的由不规则多边形拼凑的地图,需要用到「泰森多边形」,我们可以通过pip install geovoronoi来安装辅助库。

因为泰森多边形需要从点出发创建多边形,因此我们可以生成目标面内部的随机散点,再作为输入来生成所需的多边形:

from geovoronoi import voronoi_regions_from_coords


np.random.seed(42)
coords = gpd.GeoSeries([Point(x, y) for x, y in zip(np.random.uniform(xmin, xmax, 1000), 
                                                    np.random.uniform(ymin, ymax, 1000))],
                       crs=albers_proj)

# 得到china_total内部的散点坐标数组
coords = coords[coords.within(china_total[0])]

# 利用geovoronoi得到所需的泰森多边形,其中poly_shapes即为我们需要的多边形
poly_shapes, pts, poly_to_pt_assignments = voronoi_regions_from_coords(np.array(coords.apply(lambda g: (g.x, g.y)).tolist()), 
                                                                       china_total[0])

fig, ax = plt.subplots(figsize=(8, 8))

ax = china_total.plot(ax=ax, facecolor='none', 
                      edgecolor='white', linewidth=0.5)

(
    gpd
    .GeoSeries(poly_shapes)
    .buffer(-10*1000)
    .plot(ax=ax, 
          facecolor='white',
          linewidth=0.2)
)

ax.set_xticks([])
ax.set_yticks([])

ax.set_facecolor('#4a4db7')
fig.set_facecolor('#4a4db7')

ax.spines['left'].set_color('none')
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
ax.spines['bottom'].set_color('none')

fig.savefig('图8.png', dpi=500, bbox_inches='tight', pad_inches=0)
图8

以上就是本文的全部内容

本文完整代码及数据已上传至Github仓库https://github.com/CNFeffery/FefferyViz

●用Pandas秒秒钟搞定24张Excel报表!●10大Python数据可视化库!
后台回复“入群”即可加入小z数据干货交流群
数据不吹牛
关注 关注
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
模仿精进数据可视化08:哪个省份的学子是熬夜冠军?
Python数据之道
04-19 113
来源:Python大数据分析❝本文完整代码及数据已上传至Github仓库https://github.com/CNFeffery/FefferyViz❞1 简介我们今天要复刻的数据可视化作...
用 Python 创建 Voronoi 图
最新发布
gis收藏家的博客
04-26 1234
假设有人很快就会耗尽汽油,他/她需要在为时已晚之前找到最近的加油站,解决这个问题的最佳解决方案是什么?当然,驾驶员可以检查地图来找到最近的加油站,但如果该地区有多个加油站,并且他/她需要快速确定哪个加油站是最近的,则可能会出现问题。所以在多边形内,最近的 POI 肯定是多边形内的点。Geovoronoi 是一个用于在地理区域内创建和绘制 Voronoi 区域的软件包。在这个项目,我根据 POI 数据在地图上创建 Voronoi 区域。创建新的数据框来收集每个 Voronoi 区域内的街道网络。
基于geopandas的空间数据分析——空间计算篇(下)
fengdu78的博客
06-30 1万+
本文示例代码及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes1 简介在基于geopandas的空间数...
空间分析:2-4.Python生成泰森多边形
吴道简的博客
11-11 4195
代码注释很详细,如何生成泰森多边形和德洛内三角网。 用的是Python3,使用了scipy和matplotlib、numpy、shapely,引用matplotlib主要是为了看一下效果。 注释很详细,看代码就行。 from scipy.spatial import Voronoi,voronoi_plot_2d import matplotlib.pyplot as plt import numpy as np from shapely.geometry import Polygon, Li...
geovoronoi:用于在地理边界内创建和绘制Voronoi地区的软件包
05-22
geovoronoi –用于在地理区域内创建和绘制Voronoi地区的软件包 马库斯·康拉德(Markus Konrad) ,2021年2月 概述 geovoronoi帮助生成地理数据的,例如某个国家的公立大学的坐标。 反过来,这可以用于估计某种“覆盖率”。 但是,用法并不限于地理数据。 此程序包使您可以在任何有效的周围多边形形状内生成有限的Voronoi区域。 该程序包的主要功能voronoi_regions_from_coords()获取坐标列表,并使用从计算Voronoi区域。 在边缘,这些区域达到无穷大。 然后,我们可以采用周围区域的形状(例如,一个国家为多边形的形状)来切割Voronoi区域,以使其适合所提供的形状,从而使边缘的区域有限。 geovoronoi使用进行这些操作。 该软件包还实现了一些功能,可轻松绘制所得的Voronoi区域。 安装 该软件包可在。 您可以
Python数据可视化之matplotlib精进1
08-04
本篇文章主要探讨了matplotlib在数据可视化精进技巧,包括多边形颜色填充、圆弧和楔形的绘制以及日期型时间序列图的创建,以及如何设置日期刻度线。 首先,我们来关注多边形颜色填充。matplotlib的`fill()`...
ECharts Web数据可视化教案-基于ECharts的大数据分析可视化平台实现无人售货机用户分析教案.docx
12-16
2. 在大数据分析可视化平台怎么进行可视化展示? 拓展性问题: 1. 如何利用大数据分析可视化平台完成第 6 章的无人售货机零售项目? 教材与参考资料: 1. 《Web 数据可视化》教材 2. 《Python 数据分析与...
FB:基础语法+爬虫精进+自动化办公+数据分析.rar
11-13
1、最大的收获是明白了编程的思维模式。 ...8、课程的代码书写与运行的网络终端好像为每个学员提供了一台虚拟电脑上机实践一样,有种在网络大学里学习的感觉,也许未来网络大学将冲击实体大学。
DataVizLabs:这是GIS 715数据可视化的所有实验提交资料的存储库
03-05
这个DataVizLabs存储库的"DataVizLabs-main"可能包含实验指南、代码示例、数据集、作业要求、学生作品和评估标准等文件,为学习者提供了一个全面的实践平台,帮助他们在数据可视化领域不断精进
精神小伙python小白用python可视化分析青春有你2小姐姐有关数据
12-21
在本文,我们将探讨如何利用Python进行数据可视化分析,以《青春有你2》这档节目的小姐姐们的数据为例。Python作为一种强大的编程语言,尤其在数据处理和可视化方面有着广泛的应用。通过Python库如matplotlib、...
js图片缩放效果(模拟google地图
08-10
js图片缩放效果(模拟google地图) js图片缩放效果
实现类似地图放大缩小图片
06-26
实现类似地图放大缩小图片
jQuery模仿谷歌可放大缩小拖动的地图代码
01-04
jQuery模仿谷歌可放大缩小拖动的地图代码
Python模块之Shapely
Python打杂工程师
06-01 3万+
Shapely通过Python的ctypes模块,对平面特征进行集合理论分析和操作。进行地理信息系统研究、数据处理、空间分析的常用模块
泰森多边形(Voronoi图)生成算法
热门推荐
never give up的博客
09-04 9万+
本文描述了在geomodel模块,生成泰森多边形所使用的算法。
Voronoi(奥洛诺依)图定义及算法
远航的专栏
07-12 7349
Voronoi网格多边形的主要思想是为点创建区域,使其区域(多边形)只受核心点的影响。Voronoi网格多边形定义:1:假设在平面随机生成n个点P1、P2、P3 ` ` ` ` ` `Pn,所有点不共线;2:选取一点P1作为参考点,P1作为起点连接其它n-1个点;3:对于每条线段做其垂线,这样总共有n-1条垂线相交形成一些多边形;4:离参考点P1最近的垂线围成的多边
Geotools----生成泰森多边形
LongJ_Sir的博客
05-14 1348
介绍而不与实际需求相结合,都是食之无味---某人说。今天介绍一下geotools生成泰森多边形。 在geotools是内置了泰森多边形的算法的,主要依赖于VoronoiDiagramBuilder 类 利用如下的方式就完成了泰森多边形的计算: VoronoiDiagramBuilder voronoiDiagramBuilder = new VoronoiDiagramBuilder(); List<Coordinate> coords = new ArrayList<Coo.
[GIS原理] 4.4 镶嵌空间数据结构 - Voronoi图/Thienssen多边形 | Delaunay三角网 | TIN
geodoer
11-22 5621
文章目录镶嵌式空间数据结构Voronoi图空间数据结构TIN数据结构以三角形为基本对象以结点为基本对象 镶嵌式空间数据结构 以正方形和矩形单元进行地理空间划分的规则镶嵌数据模型,采用栅格数据结构进行数据的组织; Voronoi多边形和TIN三角网采用专门的数据结构进行数据组织 Voronoi图空间数据结构 TIN数据结构 以三角形为基本对象 以结点为基本对象 ...
Python数据可视化之matplotlib精进:填充、日期、颜色
综上所述,本文介绍了matplotlib在数据可视化的一些精进功能,包括填充、圆弧和楔形绘制、日期型时间序列图以及一般化的日期刻度线设置。这些功能的灵活运用可以帮助用户更好地解读和分析数据,从而更好地进行数据...
写文章

热门文章

  • 终于有人把 p 值讲明白了! 46762
  • 《 2021大学生就业分析报告 》 40602
  • 去A片马赛克,开发者被抓了。 32244
  • 基于Python的 LSTM模型,更加精准的时间序列预测 26706
  • 如何检验方差齐性? 23902

最新评论

  • 数据分析实战之超市零售分析(附python代码)

    Fayerrr: 零售数据

  • 2024年,全球大学计算机专业排名!

    昭天icy: 已留言

  • 数据分析实战之超市零售分析(附python代码)

    m0_74279827: 零售数据

  • 数据分析实战之超市零售分析(附python代码)

    m0_74279827: 零售数据

  • 信息流广告投放分析实战案例!

    Treee9: 贝叶斯公式写错了,P(A|B) = P(B|A)*P(A)/P(B)

最新文章

  • 《数据分析实践:专业知识和职场技巧》终于来了!
  • 2024年,全球大学计算机专业排名!
  • 再版到第14版,连续25年美国统计类教材首选,这本统计学神书中文版来啦!
2024年25篇
2023年86篇
2022年227篇
2021年545篇
2020年568篇
2019年23篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家福建欧式玻璃钢雕塑供应商河南玻璃钢雕塑定制设计白银彩色玻璃钢雕塑价格曲靖市玻璃钢雕塑费用信阳玻璃钢卡通雕塑哪家好邛崃玻璃钢花盆花器沅江玻璃钢气球雕塑郑州附近玻璃钢仿铜雕塑定做厂家萍乡玻璃钢雕塑产品玻璃钢蓝莓卡通雕塑南京哪里有玻璃钢雕塑厂家重庆个性化玻璃钢雕塑杭州人物玻璃钢雕塑设计汕头美陈玻璃钢雕塑桥北商场新春美陈鹤壁玻璃钢人物雕塑销售厂家长春玻璃钢关公雕塑制作玻璃钢雕塑的步骤信阳玻璃钢园林不锈钢雕塑公司商场美陈灵感性能可靠玻璃钢花盆长春玻璃钢雕塑加工八路军玻璃钢雕塑温州玻璃钢雕塑多少钱一平米商场节庆美陈雕塑设计及定制玻璃钢雕塑甜瓜图片玻璃钢小白象雕塑扬州玻璃钢雕塑批发合肥时尚玻璃钢面包雕塑玻璃钢仿真梅花鹿雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化