Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >在Python Matplotlib中制作瀑布图

在Python Matplotlib中制作瀑布图

作者头像
fanjy
发布于 2022-06-04 02:11:53
发布于 2022-06-04 02:11:53
2.9K00
代码可运行
举报
文章被收录于专栏:完美Excel完美Excel
运行总次数:0
代码可运行

标签:Python,Matplotlib,瀑布图

我们将用Python制作瀑布图,特别是使用matplotlib库。瀑布图显示了运行总数以及增减,这对于属性分析来说是很好的选择。

Matplotlib没有像“waterfall_chart()”这样的神奇函数,使我们能够用一行代码就绘制瀑布图。然而,可以使用一点小小的技巧在Python中自定义自己的瀑布图。

1.创建标准的条形图。

2.创建另一个条形图并将其放在第一个条形图的顶部,然后将新条形图的颜色设置为与背景色相同的颜色,以隐藏第一个条形图的底部。

实际上,因为我们看不到第二组条形图,所以我们可以使用它们来“隐藏”另一组条形图。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
df= pd.DataFrame({'category':['Sales','Service','Expenses','Taxes','Interest'],
                   'num':[100,10,-20,-30,60]})

代码运行结果如下图1所示。

图1

任务现在变成创建两个条形图,其中一个应该记录运行总数,另一个只是运行总数的变化,我们稍后就会看到。

可以使用cumsum()方法计算一个运行总数,然后将其下移1行。这两个新的列tot和tot1为我们提供了每个瀑布条的起点和终点。例如,在第2行Expenses(费用)中,起点是110,终点是90。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df['tot']= df['num'].cumsum()
df['tot1']= df['tot'].shift(1).fillna(0)

代码运行结果如下图2所示。

图2

由于起点和终点可以位于两个新列中的任意一列(取决于值的符号),因此我们可以再创建两列来捕获upper点和lower点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
lower= df[['tot','tot1']].min(axis=1)
upper= df[['tot','tot1']].max(axis=1)

我们使用upper点绘制第一组条形图。注意,这些条形的颜色与背景颜色不同。然后,我们使用lower点绘制第二组条形图,并将颜色设置为与背景颜色相同,默认情况下为白色。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fig,ax= plt.subplots()
ax.bar(x=df['category'],height=upper,)
ax.bar(x=df['category'],height=lower,color='white')

现在我们得到一个类似下面图3所示的图表。基本上,由于与背景颜色相同,高度为“lower点”的条形图是不可见的。

图3

现在,我们有了一个基本的瀑布图,再给它添加一些颜色。这里使用绿色表示增加,红色表示减少。

数据在num列中随时可用,让我们创建一个新的color列来存储每个类别的适当颜色。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df.loc[df['num']>= 0, 'color'] = 'green'
df.loc[df['num']< 0, 'color'] = 'red'

使用新颜色重新绘制条形图,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ax.bar(x=df['category'],height=upper,color= df['color'])

运行结果如下图4所示。

图4

瀑布图显示了每个类别对总数的贡献,因此可在每个条形的中间添加标签信息。也可以添加“连接符”,将上一个条形的起点和终点连接到下一个条形。

下面将完整的瀑布图代码转换为一个方便的Python函数,以便以后可以重用它。该函数接受三个参数:包含数据的数据框架、要放置为x轴的数据列的名称以及要用作y轴的数据列的名称。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def waterfall(df, x, y):
    # 计算运行总数
    df['tot'] = df[y].cumsum()
    df['tot1']=df['tot'].shift(1).fillna(0)
    # 条形图的lower点和upper点
    lower = df[['tot','tot1']].min(axis=1)
    upper = df[['tot','tot1']].max(axis=1)
    # 为标签位置的中间点
    mid = (lower + upper)/2
    # 正数显示绿色, 负数显示红色
    df.loc[df[y] >= 0, 'color'] = 'green'
    df.loc[df[y] < 0, 'color'] = 'red'
    # 计算连接点
    connect= df['tot1'].repeat(3).shift(-1)
    connect[1::3] = np.nan
    fig,ax = plt.subplots()
    # 绘制具有颜色的第一个条形
    bars = ax.bar(x=df[x],height=upper, color=df['color'])
    # 绘制第二个条形 - 不可见
    plt.bar(x=df[x],height=lower,color='white')
    # 绘制连接线
    plt.plot(connect.index,connect.values, 'k')
    # 绘制条形标签
    for i, v in enumerate(upper):
        plt.text(i-.15, mid[i],f"{df[y][i]:,.0f}")
waterfall(df,'category','num')

代码运行的结果如下图5所示。

图5

注:本文学习整理自pythoninoffice.com,供有兴趣的朋友参考。

欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。

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

本文分享自 完美Excel 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python 数据可视化工具包 matplotlib
ps: 在 jupyter notebook 环境需要添加 %matplotlib inline ,使得绘图生成在 notebook 页面。其他环境需要去掉 %matplotlib inline。
我是一条小青蛇
2019/10/23
8760
python 数据可视化工具包 matplotlib
教程 | 5种快速易用的Python Matplotlib数据可视化方法
选自towardsdatascience 作者:George Seif 机器之心编译 参与:刘晓坤、思源 数据可视化是数据科学家工作的重要部分。在项目的早期阶段,我们通常需要进行探索性数据分析来获得对数据的洞察。通过数据可视化可以让该过程变得更加清晰易懂,尤其是在处理大规模、高维度数据集时。在本文中,我们介绍了最基本的 5 种数据可视化图表,在展示了它们的优劣点后,我们还提供了绘制对应图表的 Matplotlib 代码。 Matplotlib 是一个很流行的 Python 库,可以帮助你快速方便地构建数
机器之心
2018/05/09
2.5K0
教程 | 5种快速易用的Python Matplotlib数据可视化方法
Python 绘图,我只用 Matplotlib(三)—— 柱状图
上篇文章,我已经讲解绘制图像大致步骤,接下来的系列文章将分别对各种图形做讲解。其实就是了解各个图种的绘图 API。文章就讲解第一种图形,柱状图。
猴哥yuri
2018/08/16
3.1K0
可视化技能之Matplotlib(上)|可视化系列01
Matplotlib可以说是Python最声名远扬的可视化库了,也是Python数据分析库的“三驾马车”之一。Matplotlib是基础而非常强大的可视化库,Seaborn等好用的可视化库是在前者的基础上进行的封装。Matplotlib擅长快速出简单的图、有丰富的接口进行精细化绘图、和Numpy结合做科学可视化及三维图配合默契、三维图。但也有些缺点,如不容易基于实用目的绘制有一定难度的图表(如小提琴图等)、标签等元素需指定坐标而不能自适应优化显示、难以实现交互。
蛰虫始航
2020/04/09
1.8K0
比较(六)利用python绘制径向柱图
径向柱图基于同心圆网格来绘制条形图,虽然不如普通条形图表达准确,但却有抓人眼球的效果。其衍生的南丁格尔玫瑰图则广为人知。
HsuHeinrich
2024/07/15
2650
比较(六)利用python绘制径向柱图
Matplotlib 可视化最有价值的 14 个图表(附完整 Python 源代码)
这些图表根据可视化目标的7个不同情景进行分组。 例如,如果要想象两个变量之间的关系,请查看“关联”部分下的图表。 或者,如果您想要显示值如何随时间变化,请查看“变化”部分,依此类推。
CSDN技术头条
2019/11/19
1.1K0
Matplotlib 可视化最有价值的 14 个图表(附完整 Python 源代码)
数据分析最有用的Top 50 Matplotlib图(带有完整的Python代码)(上)
50个Matplotlib图的汇编,在数据分析和可视化中最有用。此列表允许您使用Python的Matplotlib和Seaborn库选择要显示的可视化对象。
Datawhale
2019/10/18
2.1K0
数据分析最有用的Top 50 Matplotlib图(带有完整的Python代码)(上)
Python数据分析Matplotlib
1.2 使用matplotlib.pyplot中的annotate()函数标注文字
荣仔_最靓的仔
2021/02/02
3.6K0
Python数据分析Matplotlib
深度好文 | Matplotlib 可视化最有价值的 50 个图表(附完整 Python 源代码)
在数据分析和可视化中最有用的 50 个 Matplotlib 图表。 这些图表列表允许您使用 python 的 matplotlib 和 seaborn 库选择要显示的可视化对象。
数据派THU
2019/05/09
1.7K0
深度好文 | Matplotlib 可视化最有价值的 50 个图表(附完整 Python 源代码)
可视化技能之Matplotlib(下)|可视化系列02
在本系列的上篇文章里,我们从Matplotlib的基础可视化框架开始,逐步画出折线图、柱状图等基础图表,通过对坐标轴标签、标题文本等的精细调节画出信息更明确丰富的可视图,也实践了双轴图及子图,最后看了下极坐标系下绘图的效果。本篇继续探索Matplotlib的强悍可视化能力。
蛰虫始航
2020/04/08
1.6K0
可视化技能之Matplotlib(下)|可视化系列02
25 个常用 Matplotlib 图的 Python 代码,收藏收藏!
大家好,今天要分享给大家25个Matplotlib图的汇总,在数据分析和可视化中非常有用,文章较长,可以马起来慢慢练手。
Python数据科学
2020/05/26
8460
比较(一)利用python绘制条形图
条形图主要用来比较不同类别间的数据差异,一条轴表示类别,另一条则表示对应的数值度量。
HsuHeinrich
2024/06/06
2520
比较(一)利用python绘制条形图
超长好文 |Matplotlib 可视化最有价值的 50 个图表(附完整 Python 源代码)
在数据分析和可视化中最有用的 50 个 Matplotlib 图表。 这些图表列表允许您使用 python 的 matplotlib 和 seaborn 库选择要显示的可视化对象。
小小詹同学
2019/11/12
1.2K0
超长好文 |Matplotlib 可视化最有价值的 50 个图表(附完整 Python 源代码)
Python-matplotlib 学术柱状图绘制
柱状图或条形图在学术论文中使用的频率还是很大的,图中需要以不同颜色对不同数据进行区分,但当涉及黑白打印时,色彩颜色的区别度较小,导致难以理解,因此需要绘制黑灰颜色或者黑白阴影的柱状图或者条形图,下面就具体介绍使用Python-matplotlib 的实现过程。
气象学家
2020/07/17
4.7K0
Python-matplotlib 学术柱状图绘制
完整版|Matplotlib 可视化最有价值的 50 个图表
在数据分析和可视化中最有用的 50 个 Matplotlib 图表。这些图表列表允许您使用 python 的 matplotlib 和 seaborn 库选择要显示的可视化对象。
石晓文
2019/10/31
1.3K0
Matplotlib 学习笔记
在 matplotlib 中,整个图像为 Figure ,而一个 Figure 中可以有多个 axes。
zucchiniy
2020/05/22
5440
matplotlib入门
MATlAB是美国MathWorks公司出品的商业数学软件,用于数据分析、无线通信、深度学习、量化金融与风险管理、机器人,控制系统等领域。MATLAB在数值计算方面首屈一指,也是使用最广泛的科研绘图软件之一。优点:编程效率高 便于矩阵计算。缺点:循环效率低 封装性不好。
用户2225445
2022/11/12
4.4K0
matplotlib入门
python matplotlib各种绘图类型完整总结
plot([x], y, [fmt], [x2], y2, [fmt2], …, **kwargs)
Twcat_tree
2022/12/05
6K0
python matplotlib各种绘图类型完整总结
10 种常用 Matplotlib 图的 Python 代码
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
松鼠爱吃饼干
2020/09/15
6840
10 种常用 Matplotlib 图的 Python 代码
Python数据分析--堆叠图
最近阅读学习了林骥老师的《数据化分析 Python 实战》,书中讲好的技能应该刻意的练习,而不是简单的重复。
MiaoGIS
2022/04/24
1K0
Python数据分析--堆叠图
推荐阅读
相关推荐
python 数据可视化工具包 matplotlib
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验