开发者

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

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

什么是瀑布图?瀑布图用表达两个数值之间的变化过程,过程值为正的时候,向上加,过程值为负的时候向下减[1]。

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

今天分享在python中绘制瀑布图的3种简单方法(使用不同的库)!

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

前期准备

首先先安装所需的库:

pipinstallwaterfallcharts(注意该库名)
pipinstallwaterfall_ax(注意该库名)
pipinstallplotly

接着导入要搭配使用的Pandas库和Matplotlib库:

importpandasASPd
importmatplotlib.pyplotasplt
plt.rcParams["figure.figsize"]=(16,8)
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False

准备一些模拟数据,用于后续不同的Python库绘制瀑布图。

df=pd.DataFrame(
data={
"time":["2021end","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

fromwaterfall_aximportWaterfallChart
fig,ax=plt.subplots(1,1,figsize=(16,8))
waterfall=WaterfallChart(df["users"].to_list())
wf_ax=waterfall.plot_waterfall(ax=ax,title="人生苦短,快学Python!")

一文教你如何使用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["ti开发者_JS培训me"].to_list(),
metric_name="#users",
last_step_label="now"
)
wf_ax=waterfall.plot_waterfall(ax=ax,title="人生苦短,快学Python!")

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

方法二:waterfall编程客栈_chart

方法二是使用waterfall_chttp://www.devze.comhart库,不过会较上一个方法多一个步骤,即需要加一个包含增量的列[2]。如下所示,我们可以向dataframe中添加一个新列并计算得到增量diff

importwaterfall_chart
df_1=df.copy()
df_1["delta"]=df_1["users"].diff().fillna(100)
df_1

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

在交互式环境中输入如下命令,

waterfall_chart.plot(df_1["time"],df_1["delta"])

运行输出:

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

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

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

在交互RCZVoBJE式环境中输入如下命令:

fig=go.Figure(
go.Waterfall(
measure=df_2["measure"],
x=df_2["time"],
textposiRCZVoBJEtion="outside",
text=df_2["delta_text"],
y=df_2["delta"],
)
)

fig.update_layout(
title="人生苦短,快学Python!",
showlegend=False
)

fig.show()

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

使用plotly库有一个非常大的优势,这些图是完全交互的,我们可以放大,也可以通过选项来获取更多信息,如下图所示。

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

另外,与之前两种方法绘制的图相比,刚刚plotly库绘制的图少了一个“柱子”显示净/总计。可以这样处理:

total_row=pd.DataFrame(
data={
"time":"now",
"usejsrs":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()

运行输出:

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

如果你对使用plotly 绘制瀑布图感兴趣,可以访问链接https://plotly.com/python/waterfall-charts/了解更多。

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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新开发

开发排行榜