前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >瀑布图的一种改进方法

瀑布图的一种改进方法

作者头像
数据森麟
发布2020-04-08 13:56:38
1.4K0
发布2020-04-08 13:56:38
举报
文章被收录于专栏:数据森麟
在「瀑布图有什么用?怎么

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

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

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

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

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

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

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

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

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

1. 读取数据

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

代码语言:javascript
复制
# 导入所需的库
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 库进行画图。

代码语言:javascript
复制
########## 开始画图 ###############

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. 更新布局

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

代码语言:javascript
复制
# 更新布局
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 代码,并用视频做了演示,希望能够对你有所启发。

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据森麟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档