一文教你如何使用Python绘制瀑布图
作者:快学Python 发布时间:2023-07-10 18:29:28
什么是瀑布图?瀑布图用表达两个数值之间的变化过程,过程值为正的时候,向上加,过程值为负的时候向下减[1]。
今天分享在Python中绘制瀑布图的3种简单方法(使用不同的库)!
前期准备
首先先安装所需的库:
pip install waterfallcharts (注意该库名)
pip install waterfall_ax (注意该库名)
pip install plotly
接着导入要搭配使用的Pandas库和Matplotlib库:
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = (16, 8)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
准备一些模拟数据,用于后续不同的Python库绘制瀑布图。
df = pd.DataFrame(
data={
"time": ["2021 end", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
"users": [100, 120, 110, 150, 160, 190, 240, 200, 230, 240, 250, 280, 300]
}
)
方法一:waterfall_ax
首先我们使用waterfall_ax
库,它是基于 Matplotlib 来创建灵活的瀑布图。
https://github.com/microsoft/waterfall_ax
from waterfall_ax import WaterfallChart
fig, ax = plt.subplots(1, 1, figsize=(16, 8))
waterfall = WaterfallChart(df["users"].to_list())
wf_ax = waterfall.plot_waterfall(ax=ax, title="人生苦短,快学Python!")
需要注意一点,waterfall_ax
这个库使用的是 Python 列表,所以在上面代码中我们将Pandas的"users"列通过to_list
转为了列表。
此外,我们还可以增加更多的参数,如下所示:
fig, ax = plt.subplots(1, 1, figsize=(16, 8))
waterfall = WaterfallChart(
df["users"].to_list(),
step_names=df["time"].to_list(),
metric_name="# users",
last_step_label="now"
)
wf_ax = waterfall.plot_waterfall(ax=ax, title="人生苦短,快学Python!")
方法二:waterfall_chart
方法二是使用waterfall_chart
库,不过会较上一个方法多一个步骤,即需要加一个包含增量的列[2]。如下所示,我们可以向dataframe中添加一个新列并计算得到增量diff
。
import waterfall_chart
df_1 = df.copy()
df_1["delta"] = df_1["users"].diff().fillna(100)
df_1
在交互式环境中输入如下命令,
waterfall_chart.plot(df_1["time"], df_1["delta"])
运行输出:
waterfall_chart
库同样也可以增加其他参数,本文不再做单独展示。
方法三:plotly
前面的两种方法相对来说比较小众一点,那么方法三用到的plotly
库大家一定都比较熟悉。与waterfall_chart
库一样,在绘制之前也需要多一步进行数据处理。
df_2 = df_1.copy()
df_2["delta_text"] = df_2["delta"].astype(str)
df_2["measure"] = ["absolute"] + (["relative"] * 12)
df_2
在交互式环境中输入如下命令:
fig = go.Figure(
go.Waterfall(
measure=df_2["measure"],
x=df_2["time"],
textposition="outside",
text=df_2["delta_text"],
y=df_2["delta"],
)
)
fig.update_layout(
title="人生苦短,快学Python!",
showlegend=False
)
fig.show()
使用plotly
库有一个非常大的优势,这些图是完全交互的,我们可以放大,也可以通过选项来获取更多信息,如下图所示。
另外,与之前两种方法绘制的图相比,刚刚plotly
库绘制的图少了一个“柱子”显示净/总计。可以这样处理:
total_row = pd.DataFrame(
data={
"time": "now",
"users": 0,
"delta":0,
"delta_text": "",
"measure": "total"
},
index=[0]
)
df_3 = pd.concat([df_2, total_row], ignore_index=True)
用于生成瀑布图的Python代码实际上并未改变,唯一的区别是我们使用的DataFrame增加一个额外行。
fig = go.Figure(
go.Waterfall(
measure=df_3["measure"],
x=df_3["time"],
textposition="outside",
text=df_3["delta_text"],
y=df_3["delta"],
)
)
fig.update_layout(
title="人生苦短,快学Python!",
showlegend=False
)
fig.show()
运行输出:
如果你对使用plotly
绘制瀑布图感兴趣,可以访问链接https://plotly.com/python/waterfall-charts/了解更多。
来源:https://mp.weixin.qq.com/s/hbJywYW8a-qDVELIPZgbxQ
猜你喜欢
- Oracle数据库提供了几种不同的数据库启动和关闭方式,本文将详细介绍这些启动和关闭方式之间的区别以及它们各自不同的功能。 一、启动和关闭O
- 下面是出现的错误解释RuntimeError: An attempt ha
- 本文实例讲述了php简单获取复选框值的方法。分享给大家供大家参考,具体如下:html:<form id="form1&quo
- 本次爬虫用到的网址是:http://www.netbian.com/index.htm: 彼岸桌面.里面有很多的好看壁纸,而且都是可以下载高
- 在项目中遇到一情况让困扰了半天,同一张PNG8图片为何部份图标在IE6中消失呢?当时一度怀疑是cache或hosts问题反反复复开关浏览器结
- 1. 简介在windows系统上,重复性的操作可以用Python脚本来完成,其中常用的模块是win32gui、win32con、win32a
- 问:怎样解决MySQL 5.0.16的乱码问题?答:MySQL 5.0.16的乱码问题可以用下面的方法解决:1.设置phpMyAdminLa
- 1. settings.py文件做开发离不开必定离不开日志, 以下是我在工作中写Django项目常用的logging配置.# 日志配置BAS
- 目录前言什么是装饰器Python 函数的基本特性函数名的本质:将函数作为变量使用:进一步实现装饰器使用Python装饰器语句:总结前言在 p
- prototype框架最早是出于方便Ruby开发人员进行JavaScript开发所构建的,从这个版本上更加体现的淋漓尽致。比起1.3.1版本
- 1、判断请求头来进行反爬这是很早期的网站进行的反爬方式User-Agent 用户代理referer 请求来自哪里cookie 也可以用来做访
- 一.WITH AS的含义 WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片
- pandas中包含了DataFrame和Series数据类型,分别表示二维数据结构和一维数据结构。简单的可以理解为Series为excel表
- 要写爬虫爬取大量的数据,就会面临ip被封的问题,虽然可以通过设置延时的方法来延缓对网站的访问,但是一旦访问次数过多仍然会面临ip被封的风险,
- 基本原理使用Adodb.Stream读二进制文件然后进行解析,然后返回一数组第一个元素为类型(BMP JPG PNG GIF SWF)第二个
- 1. 介绍灰度切割:增强特定范围的对比度,突出图像 * 定范围的亮度(灰度级分层也叫灰度切割)实现灰度切割的方法有很多种,但基本的方法就两种,
- 这个功能现在很多网站,论坛都有,本站也有呵呵!如果您还不知道如何实现这个功能,没关系看看本文吧!我将给你介绍怎么给你的网站加上运行代码框的功
- pip是常用的python包管理工具,用python的同学,都离不开pip ~~第一种 在系统自带的python2.7的路径下pip是pyt
- 什么是 JScript?JScript 是由微软开发的活动脚本语言,基于 ECMAScript 规范实现。Internet Explorer
- 解决anaconda打不开的问题,亲测成功!!彻底卸载四步骤1.找到anaconda的安装路径,删除envs文件和pkgs文件2.运行ana