数据可视化 | 20行代码玩转象限图!

简介: Python 的绘图功能非常强大,如果能将已有的绘图库的各种复杂操作汇总在一个自己写的函数甚至是库/包中,并实现一行代码就调用并实现复杂的绘图功能,那就更是如虎添翼。今天,我们就来讲讲一学就会的象限图。

image.png

上图学名叫波士顿矩阵分析图,大白话四象限图。这种图经常用于两个维度的散点图中,根据特定的分割线(均值,目标值,实际值等)将数据分为四类,使人一目了然。


常用的场景为分析两个维度的变化比如:比较商品的库存天数和库存周转率,充值人数和每付费用户平均收益,购物篮系数和购物篮数量等


如何使用 Python 画出此图是本文的目标,事不宜迟,赶快开始!


任何复杂的 Python 绘图都不是一蹴而就的,而是先画出基础图形,后在此基础上按需添加元素并优化而成。这里以一组城市经济数据为例来讲解绘图步骤


基础散点图


df = pd.read_csv('data.csv')
df; df.plot(kind='scatter', x='经济总量水平', y='人均水平')


image.png


简洁又朴素的散点图,仅需一行代码。离期望成图还差几步


  • 为每个点添加对应的城市名称
  • 添加特定的分割线(均值,目标值,实际值)
  • 背景添加网格
  • 一些其他的定制需求...


图像优化


image.png


成图如下:


image.png


从上图可以看出:


  • 广西,河北,福建三地的人均水平和经济总量水平都偏低


  • 上海的人均经济水平很高,但经济总量水平缺只是略优于均值


  • 广东的人均经济水平稍次于均值,但经济总量水平很高


  • 等等~


当然,如果我们通过添加数量更多的定制线也可以实现常用的九宫格图


image.png


最后总结一下,Python 的一些绘图方法、参数看似琐碎,但积累到一定程度后,便可以发现许多技巧都存在共通之处。小事情重复做也会成为大麻烦,所以高手都懂得分类处理。


贯通了 3 个核心,我们才能省时省事,成为别人眼中的高手:


  • 大量重复的工作懂得批处理


  • 反复要做的固定操作固化成 " 模板 “,” 套路 "


  • 碰到异常情况,知道如何准确高效的解决。


所以我们可以将四象限图的绘制方法封装成自己的函数以供快捷调用,篇幅原因就不多展示了。


上文核心代码如下:


import matplotlib.pyplot as plt
# 为每个点添加对应的城市名称
plt.figure(figsize=(10, 8))
# 基础散点图:这里需要单独拆开 x,y 轴和希望配对的标签,为下面的轮子做准备
x, y = df['经济总量水平'], df['人均水平']
label = df['area']
plt.scatter(x, y)
plt.xlabel('经济总量水平');
plt.ylabel('人均水平')
# 对散点图中的每一个点进行文字标注
## 固定代码,无需深究,拿来即用
for a,b,l in zip(x,y,label): # zip 拉链函数将其配对组合
    plt.text(a, b+0.1, '%s.' % l, ha='center', va='bottom',                                              
                                              fontsize=14)
                   # 0.1 向上轻微偏移     
# 添加特定分割线
## vlines: vertical 垂直于 x 轴的线,在变量'经济总量'的均值处开始画,   
## y 轴的范围[1.5, 3]
plt.vlines(x=df['经济总量水平'].mean(), ymin=-1.5, ymax=3,
          colors='red', linewidth=2)
plt.hlines(y=df['人均水平'].mean(), xmin=-4, xmax=6,
          colors='red', linewidth=2)
# 背景网格
plt.grid(True)
# 定制需求:隐去四周的边框线条
# sns.despine(trim=True, left=True, bottom=True)
相关文章
|
数据可视化 数据挖掘 Python
数据分析案例-往届世界杯数据可视化
数据分析案例-往届世界杯数据可视化
845 0
数据分析案例-往届世界杯数据可视化
|
人工智能 Cloud Native 机器人
未来数据观丨中企出海,AI+ 云赋能
依托云计算和 AI 构建数字生态,正成为中国企业出海和全球化战略的必然路径和选择。
未来数据观丨中企出海,AI+ 云赋能
|
Android开发
XAMRAIN的INSTALL_FAILED_NO_MATCHING_ABIS错误处理
错误提示是:INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-11 解决方法: 打开xamarin .
1705 0
|
存储 机器学习/深度学习 算法
【博士每天一篇文献-算法】Gradient Episodic Memory for Continual Learning
本文介绍了一种名为Gradient Episodic Memory(GEM)的算法,旨在解决神经网络在持续学习中的灾难性遗忘问题,通过构建经验记忆库传递知识,同时提出了评估模型在任务间转移知识和避免遗忘能力的度量指标。
332 0
【博士每天一篇文献-算法】Gradient Episodic Memory for Continual Learning
|
机器学习/深度学习 监控 算法
开源计算机视觉库OpenCV详解
开源计算机视觉库OpenCV详解
266 3
|
NoSQL Serverless Python
在Python的Pandas中,可以通过直接赋值或使用apply函数在DataFrame添加新列。
【5月更文挑战第2天】在Python的Pandas中,可以通过直接赋值或使用apply函数在DataFrame添加新列。方法一是直接赋值,如`df['C'] = 0`,创建新列C并初始化为0。方法二是应用函数,例如定义`add_column`函数计算A列和B列之和,然后使用`df.apply(add_column, axis=1)`,使C列存储每行A、B列的和。
649 0
|
存储 传感器 定位技术
Landsat系列卫星遥感影像数据USGS中批量下载多张图像的方法
Landsat系列卫星遥感影像数据USGS中批量下载多张图像的方法
297 1
|
数据采集 JSON JavaScript
网络爬虫的实战项目:使用JavaScript和Axios爬取Reddit视频并进行数据分析
网络爬虫是一种程序或脚本,用于自动从网页中提取数据。网络爬虫的应用场景非常广泛,例如搜索引擎、数据挖掘、舆情分析等。本文将介绍如何使用JavaScript和Axios这两个工具,实现一个网络爬虫的实战项目,即从Reddit这个社交媒体平台上爬取视频,并进行数据分析。本文的目的是帮助读者了解网络爬虫的基本原理和步骤,以及如何使用代理IP技术,避免被目标网站封禁。
430 0
网络爬虫的实战项目:使用JavaScript和Axios爬取Reddit视频并进行数据分析
|
存储 运维 安全
阿里云技术专家刘晨旭:阿里云对数据可靠性保障的一些思考
互联网时代的数据重要性不言而喻,任何数据的丢失都会给企事业单位、政府机关等造成无法计算和无法弥补的损失,尤其随着云计算和大数据时代的到来,数据中心的规模日益增大,环境更加复杂,云上客户群体越来越庞大,从而造成硬件故障、软件失效等错误发生的频率也在猛增,任何架构和流程上的疏漏都可能会造成大面积的数据丢失。
3855 0