一文教你如何使用Python绘制瀑布图
目录
- 前期准备
- 方法一:waterfall_ax
- 方法二:waterfall_chart
- 方法三:plotly
什么是瀑布图?瀑布图用表达两个数值之间的变化过程,过程值为正的时候,向上加,过程值为负的时候向下减[1]。
今天分享在python中绘制瀑布图的3种简单方法(使用不同的库)!
前期准备
首先先安装所需的库:
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!")
需要注意一点,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!")
方法二: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
在交互式环境中输入如下命令,
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
在交互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()
使用plotly
库有一个非常大的优势,这些图是完全交互的,我们可以放大,也可以通过选项来获取更多信息,如下图所示。
另外,与之前两种方法绘制的图相比,刚刚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()
运行输出:
如果你对使用plotly
绘制瀑布图感兴趣,可以访问链接https://plotly.com/python/waterfall-charts/了解更多。
以上就是一文教你如何使用Python绘制瀑布图的详细内容,更多关于Python绘制瀑布图的资料请关注我们其它相关文章!
精彩评论