一文教你如何使用Python绘制瀑布图

目录
  • 前期准备
  • 方法一:waterfall_ax
  • 方法二:waterfall_chart
  • 方法三:plotly

什么是瀑布图?瀑布图用表达两个数值之间的变化过程,过程值为正的时候,向上加,过程值为负的时候向下减[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/了解更多。

以上就是一文教你如何使用Python绘制瀑布图的详细内容,更多关于Python绘制瀑布图的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python基于欧拉角绘制一个立方体

    目录 先画个立方体 欧拉角和旋转矩阵 初步演示 不同转动顺序的影响 旋转演示 先画个立方体 工欲善其事.必先利其器,在开始学习欧拉角模拟之前,可先绘制一个立方体. 在matplotlib中,这个任务可通过plt.voxels实现,下面先绘制一个最质朴的立方体 代码为 import matplotlib.pyplot as plt import numpy as np x, y, z = np.indices((2, 2, 2)) filled = np.ones((1,1,1)) ax = pl

  • Python绘制分形图案探索无限细节和奇妙之美

    目录 一.目标 二.表示图像 三.画一条线 四.画三角形 五.生成分形 六.结论 分形是无限复杂的模式,在不同的尺度上具有自相似性.例如,一棵树的树干会分裂成更小的树枝.这些树枝又分裂成更小的树枝,以此类推. 通过编程的方式生成分形,可以将简单的形状变成复杂的重复图案. 本文将探讨如何利用一些简单的几何学基础和编程知识,在Python中建立令人印象深刻的分形图案. 分形在数据科学中发挥着重要作用.例如,在分形分析中,对数据集的分形特征进行评估,以帮助理解基础过程的结构.此外,处于分形生成中心的循

  • 基于Python实现绘制一个足球

    目录 前情提要 先画六边形 再画五边形 前情提要 如果想优雅地绘制一个足球,那首先需要绘制正二十面体:用Python绘制正二十面体 其核心代码为 import numpy as np from itertools import product G = (np.sqrt(5)-1)/2 def getVertex(): pt2 = [(a,b) for a,b in product([1,-1], [G, -G])] pts = [(a,b,0) for a,b in pt2] pts += [(

  • Python实现绘制3D地球旋转效果

    目录 画一个地球 让地球转起来 画一个地球 想画一个转动的地球,那么首先要有一个球,或者说要有一个球面,用参数方程可以表示为 x​=rcosϕcosθ y=rcosϕsinθ z=rsinϕ​ 然后要有一个地球,或者说要有一个地图,用来作为贴图,映射到球面上. import numpy as np import matplotlib.pyplot as plt path = "earth1.jpg" img = plt.imread(path) h, w, c = img.shape

  • Python实现绘制多种激活函数曲线详解

    利用numpy.matplotlib.sympy绘制sigmoid.tanh.ReLU.leaky ReLU.softMax函数 起因:深度学习途中,老师留一作业,绘制激活函数及其导数,耗时挺久,记录学习过程 准备工作:下载numpy.matplotlib.sympy pip install numpy matplotlib sympy 查找对应库的文档: numpy文档 matplotlib文档 sympy文档 写代码的时候发现vscode不会格式化我的python?查了一下原来还要安装fla

  • 用Python绘制一个仿黑洞图像

    目录 简介 单位制 观测绘图 简介 黑洞图像大家都知道,毕竟前几年刚发布的时候曾火遍全网,甚至都做成表情包了. 问题在于,凭什么认为这就是黑洞的照片,而不是一个甜甜圈啥的给整模糊了得到的呢?有什么理论依据吗? 单位制 利用einsteinpy模块中的Shadow类,可以实现黑洞吸积盘的发射强度,换言之,用理论模拟一下黑洞的照片应该是什么样子的. 22年5月份发布的是人马座A*的照片,这个"黑洞"的质量为8.26×1036kg,距离地球26673光年. 根据源码推测,einstenipy

  • 如何使用Python 绘制瀑布图

    目录 前言 瀑布图 瀑布图使用条件 举个例子 Plotly 绘制瀑布图 参数设置 完整代码 Matplotlib绘制瀑布图 总结 前言 在日常生活中,我们的工作有时候需要对数据进行可视化,让它一图标之类的呈现出来.图给人的感觉是最直观的,并且能够一眼就看到数据. 今天我们一起了解瀑布图的重要性,以及如何使用不同的绘图库(如 Matplotlib.Plotly)绘制瀑布图.瀑布图是一种二维图表,专门用于了解随着时间或多个步骤或变量的增量正负变化的影响.瀑布图也称为浮砖图.飞砖图. 瀑布图 瀑布图经

  • python 绘制3D图案例分享

    目录 1.散点图 代码 输入的数据格式 2.三维表面 surface 代码 输入的数据格式 scatter + surface图形展示 3. 三维瀑布图waterfall 代码 输入的数据格式 4. 3d wireframe code 输入的数据格式 1.散点图 代码 # This import registers the 3D projection, but is otherwise unused. from mpl_toolkits.mplot3d import Axes3D # noqa:

  • PYTHON绘制雷达图代码实例

    这篇文章主要介绍了PYTHON绘制雷达图代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.雷达图 import matplotlib.pyplot as plt import numpy as np values = [0.09,-0.05,0.20,-0.02,0.08,0.09,0.03,0.027] x = np.linspace(0,2*np.pi,9)[:-1] c = np.random.random(size=(8,3)

  • Python绘制三角函数图(sin\cos\tan)并标注特定范围的例子

    根据我们指定的条件检索函数中的元素 import matplotlib.pyplot as plt import numpy as np a = np.linspace(0, 2 * np.pi, 50) b = np.sin(a) plt.plot(a,b) #生成一个正弦函数图 mask = b >= 0 plt.plot(a[mask], b[mask], 'bo') #符合条件的标注蓝色圆点 mask = (b >= 0) & (a <= np.pi / 2) plt.p

  • python绘制雪景图

    本文实例为大家分享了python绘制雪景图的具体代码,供大家参考,具体内容如下 绘制雪景图,应用到turtle和random. from turtle import * from random import * # 绘制随机雪花 def DrawSnow(snow): x = randrange(-750, 750) y = randrange(-50, 400) snowcolor = (randrange(0, 255), randrange(0, 255), randrange(0, 25

  • python绘制彩虹图

    本文实例为大家分享了python绘制彩虹图的具体代码,供大家参考,具体内容如下 from turtle import * #控制彩虹路径 def path(pen, r, g, b): pen.penup() pen.goto(-400, -300) pen.pendown() pen.pencolor(r, g, b) pen.circle(1000, -180) pen.pensize(2) pen.right(0.05) #绘制彩虹控制颜色 def Rainbow(): pen = Tur

  • 用Python绘制漫步图实例讲解

    我们首先来看下代码: import matplotlib.pyplot as plt from random import choice class RandomWalk(): def __init__(self,num_points=5000): self.num_points=num_points self.x_values=[0] self.y_values=[0] def fill_walk(self): while len(self.x_values)<self.num_points:

  • Python绘制组合图的示例

    绘制组合图: 组合图就是将多个形状,组合到⼀个图形中,主要作⽤是节约作图的空间,节省读者的时间,从⽽提⾼ 信息传达的效率. import pandas as pd import numpy as np import matplotlib.pyplot as plt def plot_combination1(): sale = pd.read_excel('./data/每月目标销售额和实际销售额.xlsx',header=0,index_col=0) # 设置正常显示中文标签 plt.rcPa

  • python绘制趋势图的示例

    import matplotlib.pyplot as plt #plt用于显示图片 import matplotlib.image as mping #mping用于读取图片 import datetime as dt import matplotlib.dates as mdates from pylab import * def draw_trend_chart(dates,y): mpl.rcParams['font.sans-serif'] = ['SimHei'] #指定默认字体 m

  • python绘制雷达图实例讲解

    在python中,有很多用于生成基于JS的百度开源的数据可视化图表 Echarts 的类库.设置的图样都非常漂亮,小编之前研究过很多图示,用python去抓取数据,然后进行画图,经历这么多得图样,最深有感触的还是关于绘制雷达图,大家应该都遇到过需要用到雷达图的时候吧,那就一起来了解下吧. 安装模块: pip install pyecharts 导入模块: from pyecharts import options as opts 准备数据: 大家可以自行导入数据使用. 绘制雷达图: randar

随机推荐