首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >利用Python绘制酷炫OD流量图的新方法

利用Python绘制酷炫OD流量图的新方法

作者头像
DataCharm
发布于 2021-02-22 07:03:06
发布于 2021-02-22 07:03:06
4K12
代码可运行
举报
运行总次数:2
代码可运行

在百度迁徙的文章里,我们画的OD地图是这样的:

这个看着其实也还行,不过仔细观察也会发现几个小问题:

1. OD线的粗细代表了流量的大小,但没有加图例,难以有客观的认识;

2. 由于OD线是直线,双向的OD会重叠在一起,比如上海到北京和北京到上海的OD线是重合的,在图面上无法区分。

为了解决这些问题,应对方法一般是:

1. 对流量大小利用颜色或者粗细进行区分,并且为了图面整体的协调,最好先对流量进行分组(自然断点法)。

2. 将OD的直线改为曲线,这样双向OD即可区分开来,并且更加美观。

先展示一下利用以上思路绘制的OD图:

这里用到的数据是按照一定规则随机生成的C市出租车的OD数据,以街道为交通小区进行OD的集计处理。下面讲一下主要的思路:

这里主要用到了matplotlib的ax.annotate命令,利用这个命令,我们可以画出各种各样的弧线:

这里抄一段官方tutorial的代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import matplotlib.pyplot as plt
def demo_con_style(ax, connectionstyle):
    x1, y1 = 0.3, 0.2
    x2, y2 = 0.8, 0.6

    ax.plot([x1, x2], [y1, y2], ".")
    ax.annotate("",
                xy=(x1, y1), xycoords='data',
                xytext=(x2, y2), textcoords='data',
                arrowprops=dict(arrowstyle="->", color="0.5",
                                shrinkA=5, shrinkB=5,
                                patchA=None, patchB=None,
                                connectionstyle=connectionstyle,
                                ),
                )

    ax.text(.05, .95, connectionstyle.replace(",", ",\n"),
            transform=ax.transAxes, ha="left", va="top")


fig, axs = plt.subplots(3, 5, figsize=(8, 4.8))
demo_con_style(axs[0, 0], "angle3,angleA=90,angleB=0")
demo_con_style(axs[1, 0], "angle3,angleA=0,angleB=90")
demo_con_style(axs[0, 1], "arc3,rad=0.")
demo_con_style(axs[1, 1], "arc3,rad=0.3")
demo_con_style(axs[2, 1], "arc3,rad=-0.3")
demo_con_style(axs[0, 2], "angle,angleA=-90,angleB=180,rad=0")
demo_con_style(axs[1, 2], "angle,angleA=-90,angleB=180,rad=5")
demo_con_style(axs[2, 2], "angle,angleA=-90,angleB=10,rad=5")
demo_con_style(axs[0, 3], "arc,angleA=-90,angleB=0,armA=30,armB=30,rad=0")
demo_con_style(axs[1, 3], "arc,angleA=-90,angleB=0,armA=30,armB=30,rad=5")
demo_con_style(axs[2, 3], "arc,angleA=-90,angleB=0,armA=0,armB=40,rad=0")
demo_con_style(axs[0, 4], "bar,fraction=0.3")
demo_con_style(axs[1, 4], "bar,fraction=-0.3")
demo_con_style(axs[2, 4], "bar,angle=180,fraction=-0.2")

for ax in axs.flat:
    ax.set(xlim=(0, 1), ylim=(0, 1), xticks=[], yticks=[], aspect=1)
fig.tight_layout(pad=0.2)

plt.show()

可以看到,通过调整arc和rad就可以画出不同的弧线。

然后遵循我们画百度迁徙的思路,再配合mapclassify对流量进行断点分组,我们就可以画出酷炫的OD流量图啦,具体结果在下面:

具体的代码和数据我已经为大家打包好 (跑代码之前需要安装一下plot_map这个包 具体安装地址见【小旭学长】大数据博士教你用python玩转时空大数据),此外还赠送给大家成都地铁的站点和线路数据!‍

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DataCharm 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
请问如何获取代码和数据
请问如何获取代码和数据
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
Matplotlib 可视化之箭头与标注的高级应用
时间线是按时间顺序显示的事件列表。它通常是一个图形设计,显示一个长条,标有与之平行的日期,通常是同时期的事件。
数据STUDIO
2022/04/11
2K0
Matplotlib 可视化之箭头与标注的高级应用
Matplotlib 中文用户指南 4.5 标注
使用text()会将文本放置在轴域的任意位置。 文本的一个常见用例是标注绘图的某些特征,而annotate()方法提供辅助函数,使标注变得容易。 在标注中,有两个要考虑的点:由参数xy表示的标注位置和xytext的文本位置。 这两个参数都是(x, y)元组。
ApacheCN_飞龙
2022/12/01
1.2K0
Matplotlib 中文用户指南 4.5 标注
这种显著标明怎么绘制?一个技巧解决,超简单~~
我们在绘制可视化图表时经常需要对特定区域、位置等使用文本或箭头等标识性字符进行注释显示,这种注释在可视化制作中尤为重要,它可以突出重要信息,引起人们对图形某个特征的关注。接下来,小编就汇总一下在R和Python可视化绘制中是如何进行注释的。具体内容如下:
DataCharm
2022/10/25
6520
这种显著标明怎么绘制?一个技巧解决,超简单~~
数据科学 IPython 笔记本 8.12 文本和注解
创建良好的可视化涉及引导读者并使图形讲述故事。在某些情况下,可以以完全可视的方式讲述这个故事,而不需要添加文本,但在其他情况下,需要小的文本提示和标签。也许你将使用的最基本的注释类型是轴标签和标题,但选项超出了这个范围。让我们看看一些数据,以及我们如何可视化和注释它,来有助于传达有趣的信息。 我们首先设置笔记本来绘图并导入我们将使用的函数:
ApacheCN_飞龙
2022/05/07
1.1K0
数据科学 IPython 笔记本 8.12 文本和注解
FiveThirtyEight商业可视化作品绝了!复现它!!教程超详细~~(直播资料分享)
经常看我直播的小伙伴应该知道,小编最近在复现一些商业网站上的优秀可视化作品,也有很多同学让我直播进行讲解,这边和小伙伴们说一下:我们安排都是先在公众号发文,然后再进行情况选择是否进行直播讲解。好了,话不多说,今天小编给大家带来的是复现FiveThirtyEight网站的一幅可视化作品,详细介绍如下:
DataCharm
2021/12/27
1K0
FiveThirtyEight商业可视化作品绝了!复现它!!教程超详细~~(直播资料分享)
Matplotlib 1.4W+字基础教程来了(收藏吃灰去吧~~)
参考:Rougier N P, Droettboom M, Bourne P E, et al. Ten Simple Rules for Better Figures[J]. PLOS Computational Biology【IF 4.7】, 2014, 10(9).感兴趣戳:https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4161295/pdf/pcbi.1003833.pdf
DataCharm
2021/02/22
1.6K0
Matplotlib 1.4W+字基础教程来了(收藏吃灰去吧~~)
数据可视化 | 手撕 Matplotlib 绘图原理(二)
关于箭头和注释风格的更多介绍与示例,可以在 Matplotlib 的画廊gallery[1]中看到,尤其推荐
数据STUDIO
2021/06/24
1.6K1
如何用python画图——带你入门matplotlib
matplotlib是python中常用的一个可视化库,大多数的操作与MATLAB非常类似,所以对于从MATLAB迁移到python的朋友是非常友好的。matplotlib使用numpy进行数组运算,也支持pandas的Series直接用于matplotlib画图。
MeteoAI
2019/07/22
3K0
Matplotlib 可视化之图例与标签高级应用
图例非常容易使用,只要求用户命名图。Matplotlib将自动创建一个包含每个图形元素的图例。即使在大多数情况下,一个简单的legend() 调用就足够了,但图例还是提供了几个选项,允许我们自定义图例的各个配置。如使用
数据STUDIO
2022/05/24
2K0
Matplotlib 可视化之图例与标签高级应用
Matplotlib新手上路(上)
matplotlib是python里用于绘图的专用包,功能十分强大。下面介绍一些最基本的用法: 一、最基本的划线 先来一个简单的示例,代码如下,已经加了注释: import matplotlib.pyplot as plt import numpy as np # 先获取一个图表 plt.figure() # 设置图表的标题 plt.title("sale report") # 设置y轴的label标签 plt.ylabel("amount") # 设置x轴的label标签 plt.xlabel("
菩提树下的杨过
2018/03/28
9750
Matplotlib新手上路(上)
局部整体图表(一)
上一篇文章结束了时间序列型图表的绘制,我们掌握了以下的绘制方法(滑动以浏览),对以往的工作做个总结。目的就是简化大家代码的书写过程,拓宽绘图方法,为科研和商业绘图提供帮助。:
python数据可视化之路
2023/02/23
7160
局部整体图表(一)
Python3快速入门(十六)——Mat
Matplotlib是 Python 2D-绘图领域使用最广泛的套件,可以简易地将数据图形化,并且提供多样化的输出格式。 matplotlib有两个接口,一个是状态机层的接口,通过pyplot模块来进行管理;一个是面向对象的接口,通过pylab模块将所有的功能函数全部导入其单独的命名空间内。
py3study
2020/01/03
1.4K0
利用ArcGIS Pro制作弧线OD图【ArcGIS Python系列】
Origin-Destination(OD)图是一种用于可视化起点和终点之间关系的地理图表。它在空间上表示出不同地点之间的连接和流动。在OD图中,起点和终点通常用节点(点)表示,而它们之间的连接则用线段或弧线表示。
renhai
2023/11/24
1.5K0
利用ArcGIS Pro制作弧线OD图【ArcGIS Python系列】
python matplotlib各种绘图类型完整总结
plot([x], y, [fmt], [x2], y2, [fmt2], …, **kwargs)
Twcat_tree
2022/12/05
6.2K0
python matplotlib各种绘图类型完整总结
maplotlib 标准颜色、风格样式和水印
一、标准颜色列表 """ ======================== Visualizing named colors ======================== Simple plot
用户6021899
2019/08/14
9200
Matplotlib入门
标题中的英文首字母大写比较规范,但在python实际使用中均为小写。 2018年7月30日笔记 作者的集成开发环境是jupyter,Python版本为3.6 建议阅读本文的读者安装anaconda3,里面包含了jupyter、python3.6和matplotlib库 下载链接: https://pan.baidu.com/s/1kKCvpXAlTdRri4lSP6gykA 密码: pygy
潇洒坤
2018/09/10
2.3K0
Matplotlib入门
Matplotlib 绘2D图
Matplotlib 是一个非常简单而又完善的开源绘图库。那么它到底有多简单呢? 基本知识 首先官方文档奉上 下面,我们通过 3 行代码绘制一张简单的折线图。 from matplotlib imp
听城
2018/04/27
2.6K0
Matplotlib 绘2D图
50题matplotlib从入门到精通
Matplotlib 是 Python 的绘图库。它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案,也可以和图形工具包一起使用。和Pandas、Numpy并成为数据分析三兄弟(我自己想的)。
派大星的数据屋
2022/04/02
1.5K0
50题matplotlib从入门到精通
酷炫一款动态背景(HTML +js canvas)
                                     一款酷炫的前端动态页面     废话不多说 ,分享一款酷炫的页面动态背景 效果见下图。     查看  demo 背景图效果: 实例效果  点击效果: 背景css *{ margin: 0; padding: 0; } #canvas{ position: fixed; background: #ccc; overflow: auto;
Fivecc
2022/11/21
6.9K0
酷炫一款动态背景(HTML +js canvas)
python数据分析之Matplotlib学习笔记
说到绘图,那必须要有一个画板。Figure作为一个“老画板”,在matlab中经常能看到它的出没,在python中,它的具体语法是什么呢?让我们来看一下。
远方的星
2021/07/31
9180
python数据分析之Matplotlib学习笔记
相关推荐
Matplotlib 可视化之箭头与标注的高级应用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验