瀑布图的制作与应用

瀑布图是一种二维可视化工具,它能够展示随时间或多个步骤的正负变化。正如Anthony T. Hincks所幽默指出的,瀑布图可以呈现多种形态。本文将深入探讨瀑布图的重要性,并展示如何利用MatplotlibPlotly库来创建瀑布图。

目录

  • 什么是瀑布图?
  • 瀑布图的必要性
  • 使用Plotly创建瀑布图
  • 使用Matplotlib创建瀑布图
  • 结论
  • 常见问题解答

什么是瀑布图?

瀑布图通常用于财务分析中,以理解多个因素对特定资产的正负影响。这种图表可以基于时间或类别来展示效果。基于类别的图表表示在费用、销售或其他具有连续正负值的变量上的收益或损失。基于时间的图表则表示在时间段上的收益或损失。瀑布图大多数是水平的,它们从水平轴开始,并通过一系列与正负评论相关的浮动柱连接。有时,柱子在图表中用线条连接。

瀑布图的必要性

让通过一个例子来理解何时何地使用瀑布图,因为制作瀑布图并不是一个难题。将使用一些虚拟数据和Kaggle数据集来构建瀑布图。

假设给一个表格,不是一个普通的表格,而是一个风格化的表格和一个瀑布图,哪一个更方便阅读?这个表格代表了一周的销售数据,使用了seaborn库来创建具有背景渐变的热图。

import seaborn as sns a = ['mon','tue','wen','thu','fri','sat','sun'] b = [10,-30,-7.5,-25,95,-7,45] df2 = pd.DataFrame(b,a).reset_index().rename(columns={'index':'values',0:'week'}) cm = sns.light_palette("green", as_cmap=True) df2.style.background_gradient(cmap=cm)

现在,将表格和瀑布图并排查看。表格显示了按顺序排列的重要值,但阅读起来相当困难。另一方面,可以轻松地看到黄色条表示减少,红色条表示增加。

使用Plotly创建瀑布图

将使用的数据来自Kaggle的Netflix电影和电视节目,笔记本可以在这里找到。将使用Plotly,这是一个开源的图表库。

import plotly.graph_objects as go df = pd.read_csv(r'D:/netflix_titles.csv') df["date_added"] = pd.to_datetime(df['date_added']) df['year_added'] = df['date_added'].dt.year df['month_added'] = df['date_added'].dt.month d2 = df[df["type"] == "Movie"] col = "year_added" vc2 = d2[col].value_counts().reset_index().rename(columns = {col : "count", "index" : col}) vc2['percent'] = vc2['count'].apply(lambda x : 100*x/sum(vc2['count'])) vc2 = vc2.sort_values(col) fig2 = go.Figure(go.Waterfall( name = "Movie", orientation = "v", x = ["2008", "2009", "2010", "2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020", "2021"], textposition = "auto", text = ["1", "2", "1", "13", "3", "6", "14", "48", "204", "743", "1121", "1366", "1228", "84"], y = [1, 2, -1, 13, -3, 6, 14, 48, 204, 743, 1121, 1366, -1228, -84], connector = {"line":{"color":"#b20710"}}, increasing = {"marker":{"color":"#b20710"}}, decreasing = {"marker":{"color":"orange"}}, ))

让逐一了解每个参数:

x: 将要出现在x轴上的值

y: 将要出现在y轴上的值

text: 将要出现在图表上的值

textposition: 可以将文本放在图表的条形内部或条形上方

为了使图表更优雅,将给图表的条形及其连接线着色。对于增加的条形,给了红色,对于减少的条形,是黄色。

图表的参数:

connector: 给连接线着色

increasing: 给增加的条形着色

decreasing: 给减少的条形着色

正如所看到的图表看起来相当不错,但让使其更具吸引力:

fig2.update_xaxes(showgrid=False) fig2.update_yaxes(showgrid=False, visible=False) fig2.update_traces(hovertemplate=None) fig2.update_layout(title='Watching Movies over the year', height=350, margin=dict(t=80, b=20, l=50, r=50), hovermode="x unified", xaxis_title=' ', yaxis_title=" ", plot_bgcolor='#333', paper_bgcolor='#333', title_font=dict(size=25, color='#8a8d93', family="Lato, sans-serif"), font=dict(color='#8a8d93'))

现在看起来完美了。

使用Matplotlib创建瀑布图

通过pip安装waterfallcharts库:

!pip install waterfallcharts

导入库:

import pandas as pd import waterfall_chart import matplotlib.pyplot as plt %matplotlib inline

让为每周的销售数据绘制一个瀑布图:

a = ['mon','tue','wen','thu','fri','sat','sun'] b = [10,-30,-7.5,-25,95,-7,45] waterfall_chart.plot(a, b);

如果仔细观察图表,正数值的条形默认是绿色,负数值是红色,总值是蓝色。

给图表添加一些参数:

waterfall_chart.plot(a, b, net_label='Total', rotation_value=360)

图表的参数:

net_label: 在最后一个条形可以改变条形的名称为net_label

rotation_value: 旋转并设置x轴的值

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485