­

瀑布图的一种改进方法

在「瀑布图有什么用?怎么

书中有一个瀑布图的示例,我认为这张图有 3 个特点:

(1)标题突出了图表中的重要信息;

(2)关键位置用箭头突出标注出来;

(3)使用不同的柱子,来表示汇总数据和相对数据。

可以看出,税前及付息前收益 -20,刚好等于前面的两个数之和,即:150 – 170,最后的净收益 6,刚好等于 -20 + 18 + 10 – 2 。

我参考上面的瀑布图,用 Python 中的 plotly 库,画出下面这张瀑布图,主要有 2 点变化:

(1)颜色区分:使用绿色代表增加,红色代表减少,蓝色代表汇总;

(2)位置调整:把标题中的一句话,调整到了箭头标注的上方,因为我觉得这样更加直观易懂。

下面开始介绍画图的具体方法。

1. 读取数据

首先,点击文章最上方的蓝字「林骥」进入公众号后台,发送「利润」两个字,可以获得该数据文件的下载链接,把该 Excel 文件保存到本地电脑,与代码文件放在同一个目录中,然后复制下面的 Python 代码,从文件中读取相关数据,并定义画图所需的变量。

# 导入所需的库  import pandas as pd  import numpy as np  import plotly.graph_objects as go    ########## 读取数据 ###############    # 从 Excel 文件中读取数据  profit = pd.read_excel('用于画瀑布图的利润表.xlsx')    # X 轴标签  x = profit.columns    # Y 轴数字  y = profit.iloc[0, :]    # 设置为相对值或汇总值  measure = ['relative']*2 + ['total'] + ['relative']*3 + ['total']

2. 开始画图

其次,我们开始利用 Python 中的 plotly 库进行画图。

########## 开始画图 ###############    fig = go.Figure(go.Waterfall(      x = x,      y = y,      text = y,      measure = measure,      # 文本标签放在柱子外面      textposition = "outside",      # 设置上升值的颜色      increasing = {"marker": {"color":"#009800"}},      # 设置下降值的颜色      decreasing = {"marker": {"color":"#CC5036"}},      # 设置中间汇总值的颜色      totals = {"marker": {"color":"#00589F"}},      # 设置柱子之间的颜色、宽度、线型      connector = {"line": {"color":"#009800", "width":1, "dash":"dot"}},      # 悬停显示的信息      hoverinfo = 'x+delta',  ))    # 设置标题  title = 'Acme 装饰品公司 1998 年的利润表(单位:百万美元)'

2. 更新布局

接下来,我们更新标题、箭头、字体、颜色、大小等参数。

# 更新布局  fig.update_layout(      # 标题位置和字体大小      title = {'text': title, 'x':0, 'y':0.9, 'xanchor': 'left', 'font':{'size':26}},      # 添加箭头标注      annotations=[dict(          # 箭头标注          x=4, y=25,          text='没有装饰品部的销售,1998 年我们将面临亏损', font={'size':20},          # 箭头大小          arrowsize=2, arrowhead=2, arrowwidth=3,          # 箭头颜色、方向和长度          arrowcolor="#00589F", ax=0, ay=-80      )],      # 字体大小      font = {'size':13},      # 隐藏 Y 轴      yaxis = {'visible': False},      # 隐藏颜色坐标线      coloraxis = {'cauto': False},      # 图片背景设置为白色      plot_bgcolor = '#FFFFFF',      # 隐藏图例      showlegend = False,      # 设置边距      margin = dict(l=20, r=20, t=90, b=20),      # 设置图形大小      width = 800, height = 500  )  # 显示图片  fig.show()

最后,在 Jupyter Lab 中运行,就可以得到上面那张瀑布图,请看下面的视频演示。

小结

本文介绍了瀑布的改进方法,给出了完整的 Python 代码,并用视频做了演示,希望能够对你有所启发。

即使是一个简单的图表,我们也可以它当成一个互联网的产品,不断努力升级迭代,精益求精,满足用户的需求。

不要忘了,画图的目的,是为了提高信息传递的效果,我们应该谨记于心。否则的话,可能做出一些很复杂的图表,但是反而容易让人迷失方向。