如何使用Python 绘制瀑布图

目录
  • 前言
  • 瀑布图
  • 瀑布图使用条件
  • 举个例子
  • Plotly 绘制瀑布图
  • 参数设置
  • 完整代码
  • Matplotlib绘制瀑布图
  • 总结

前言

在日常生活中,我们的工作有时候需要对数据进行可视化,让它一图标之类的呈现出来。图给人的感觉是最直观的,并且能够一眼就看到数据。

今天我们一起了解瀑布图的重要性,以及如何使用不同的绘图库(如 Matplotlib、Plotly)绘制瀑布图。
瀑布图是一种二维图表,专门用于了解随着时间或多个步骤或变量的增量正负变化的影响。瀑布图也称为浮砖图、飞砖图。

瀑布图

瀑布图经常用于财务分析,以了解多种因素对特定对象的正面和负面影响。该图表可以显示基于时间或基于类别的效果。基于类别的图表表示费用或销售额的收益或损失或具有顺序正值和负值的任何其他变量。基于时间的图表表示一段时间内的收益或损失。

瀑布图大多采用水平方式。它们从水平轴开始,由一系列与负面或正面评论相关的浮动列连接。有时,条形图与图表中的线条相连。

瀑布图使用条件

让我们举个例子来了解何时何地使用瀑布图,因为制作瀑布图不是什么大问题。我们将使用一些虚拟数据和 Kaggle 数据集来构建瀑布图。

举个例子

试想下,一个普通的数据表,和一个惊艳的瀑布图,哪个更方便阅读?

这张表代表了整个一周的销售数据,使用 seaborn 库创建了热图*background_gradient

import seaborn as sns*
#data
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'})
#table
cm = sns.light_palette("green", as_cmap=True)
df2.style.background_gradient(cmap=cm)

将格式化的表单数据和瀑布图放在一起查看。

该表按顺序显示了值的重要性,但读取这些值非常困难。相反,我们可以很容易地看到,按x轴正方向的连贯性顺序显示数据,并且黄色条显示减量,红色条显示增量。

Plotly 绘制瀑布图

我们将要使用的数据取自Netflix 电影和电视节目的Kaggle数据。

我们将使用一个开源图表库 Plotly绘制。

#导入库
import plotly.graph_objects as go
#数据集
df = pd.read_csv(r'D:/netflix_titles.csv')
#添加年和月并转换为正确的日期时间格式
df["date_adding"] = pd.to_datetime(df['date_ added'])
df['year_addition'] = df['date_ added'].dt.year
df['month_ added'] = df['date_addition'].dt.month
df.head(3)
#准备数据
2 = 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)
#绘制瀑布图
#现在我们将使用 Plotly trace go.Waterfall() 制作一个瀑布图。
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"}},
))

参数设置

go.Waterfall()的每个参数:

•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'))

update_layout参数:

•title: 图表的标题

•margin: 设置图表的边距:上、下、左、右

•plot_bgcolor: 设置绘图背景颜色

•paper_bgcolor: 设置纸张背景颜色

•font: 设置字体属性

•title_font: 设置标题字体属性

这里,通过使用 update_yaxes(visible=False) 隐藏了 y 轴。

完整代码

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"}},
))
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绘制瀑布图

使用Matplotlib 绘制瀑布图,需要安装第三方绘图库waterfallcharts,即使用 pip 安装瀑布图库。

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);

为Matplotlib中的瀑布图

如果仔细查看图表,默认情况下,具有正值的条形为绿色,负值为红色,总值为蓝色。

向图表添加一些参数:

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

图表参数:

•net_label: 在最后一根柱线,我们可以通过 net_label 改变柱线的名称。

•rotation_value: 旋转并设置x轴的值。

总结

本文中,我们一起看到了瀑布图的重要性:何时以及如何将它与 Plotly 和 Matploib 一起使用

到此这篇关于如何使用Python 绘制瀑布图的文章就介绍到这了,更多相关Python 绘制瀑布图内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python如何利用matplotlib绘制并列双柱状图并标注数值

    目录 项目场景: 代码: 效果图: 扩展功能及代码: 补充:Python画图实现同一结点多个柱状图 总结 项目场景: Python项目需要画两组数据的双柱状图,以下以一周七天两位小朋友吃糖颗数为例进行演示,用matplotlib库实现 代码: import matplotlib import matplotlib.pyplot as plt import numpy as np def drawHistogram(): matplotlib.rc("font", family='Mic

  • 利用Python绘制数据的瀑布图的教程

    介绍 对于绘制某些类型的数据来说,瀑布图是一种十分有用的工具.不足为奇的是,我们可以使用Pandas和matplotlib创建一个可重复的瀑布图. 在往下进行之前,我想先告诉大家我指代的是哪种类型的图表.我将建立一个维基百科文章中描述的2D瀑布图. 这种图表的一个典型的用处是显示开始值和结束值之间起"桥梁"作用的+和-的值.因为这个原因,财务人员有时会将其称为一个桥梁.跟我之前所采用的其他例子相似,这种类型的绘图在Excel中不容易生成,当然肯定有生成它的方法,但是不容易记住. 关于瀑

  • Python数据分析之绘制m1-m2数据

    目录 前言 m0-m1-m2 数据获取 ppi-cpi 图形绘制 总结 前言 前文讲述了 ppi-cpi的图形绘制,在本文中继续分享另外一个与经济息息相关的货币数据指标 M0-M1-M2 ,在这里还是采用爬虫的方式获取数据,然后通过 matplotlib 绘图工具将 m0-m1-m2 数据同框展示,最后通过颜色填充来表示其中的差额部分.对于新手来讲,会学习到 python 的基础知识.爬虫以及图形绘制的知识. m0-m1-m2 数据获取 在获取数据之前,先讲述一下数据背后的含义: 1 m0,即流

  • python绘制分组对比柱状图

    本文实例为大家分享了python绘制分组对比柱状图的具体代码,供大家参考,具体内容如下 首先放效果图:  # -*- coding: utf-8 -*- import numpy as np   import tensorflow as tf from matplotlib.path import Path from matplotlib.patches import PathPatch import matplotlib.pyplot as plt import matplotlib from

  • 如何使用Python 绘制瀑布图

    目录 前言 瀑布图 瀑布图使用条件 举个例子 Plotly 绘制瀑布图 参数设置 完整代码 Matplotlib绘制瀑布图 总结 前言 在日常生活中,我们的工作有时候需要对数据进行可视化,让它一图标之类的呈现出来.图给人的感觉是最直观的,并且能够一眼就看到数据. 今天我们一起了解瀑布图的重要性,以及如何使用不同的绘图库(如 Matplotlib.Plotly)绘制瀑布图.瀑布图是一种二维图表,专门用于了解随着时间或多个步骤或变量的增量正负变化的影响.瀑布图也称为浮砖图.飞砖图. 瀑布图 瀑布图经

  • python 绘制3D图案例分享

    目录 1.散点图 代码 输入的数据格式 2.三维表面 surface 代码 输入的数据格式 scatter + surface图形展示 3. 三维瀑布图waterfall 代码 输入的数据格式 4. 3d wireframe code 输入的数据格式 1.散点图 代码 # This import registers the 3D projection, but is otherwise unused. from mpl_toolkits.mplot3d import Axes3D # noqa:

  • PYTHON绘制雷达图代码实例

    这篇文章主要介绍了PYTHON绘制雷达图代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.雷达图 import matplotlib.pyplot as plt import numpy as np values = [0.09,-0.05,0.20,-0.02,0.08,0.09,0.03,0.027] x = np.linspace(0,2*np.pi,9)[:-1] c = np.random.random(size=(8,3)

  • Python绘制三角函数图(sin\cos\tan)并标注特定范围的例子

    根据我们指定的条件检索函数中的元素 import matplotlib.pyplot as plt import numpy as np a = np.linspace(0, 2 * np.pi, 50) b = np.sin(a) plt.plot(a,b) #生成一个正弦函数图 mask = b >= 0 plt.plot(a[mask], b[mask], 'bo') #符合条件的标注蓝色圆点 mask = (b >= 0) & (a <= np.pi / 2) plt.p

  • python绘制雪景图

    本文实例为大家分享了python绘制雪景图的具体代码,供大家参考,具体内容如下 绘制雪景图,应用到turtle和random. from turtle import * from random import * # 绘制随机雪花 def DrawSnow(snow): x = randrange(-750, 750) y = randrange(-50, 400) snowcolor = (randrange(0, 255), randrange(0, 255), randrange(0, 25

  • python绘制彩虹图

    本文实例为大家分享了python绘制彩虹图的具体代码,供大家参考,具体内容如下 from turtle import * #控制彩虹路径 def path(pen, r, g, b): pen.penup() pen.goto(-400, -300) pen.pendown() pen.pencolor(r, g, b) pen.circle(1000, -180) pen.pensize(2) pen.right(0.05) #绘制彩虹控制颜色 def Rainbow(): pen = Tur

  • 用Python绘制漫步图实例讲解

    我们首先来看下代码: import matplotlib.pyplot as plt from random import choice class RandomWalk(): def __init__(self,num_points=5000): self.num_points=num_points self.x_values=[0] self.y_values=[0] def fill_walk(self): while len(self.x_values)<self.num_points:

  • Python绘制组合图的示例

    绘制组合图: 组合图就是将多个形状,组合到⼀个图形中,主要作⽤是节约作图的空间,节省读者的时间,从⽽提⾼ 信息传达的效率. import pandas as pd import numpy as np import matplotlib.pyplot as plt def plot_combination1(): sale = pd.read_excel('./data/每月目标销售额和实际销售额.xlsx',header=0,index_col=0) # 设置正常显示中文标签 plt.rcPa

  • python绘制趋势图的示例

    import matplotlib.pyplot as plt #plt用于显示图片 import matplotlib.image as mping #mping用于读取图片 import datetime as dt import matplotlib.dates as mdates from pylab import * def draw_trend_chart(dates,y): mpl.rcParams['font.sans-serif'] = ['SimHei'] #指定默认字体 m

  • python绘制雷达图实例讲解

    在python中,有很多用于生成基于JS的百度开源的数据可视化图表 Echarts 的类库.设置的图样都非常漂亮,小编之前研究过很多图示,用python去抓取数据,然后进行画图,经历这么多得图样,最深有感触的还是关于绘制雷达图,大家应该都遇到过需要用到雷达图的时候吧,那就一起来了解下吧. 安装模块: pip install pyecharts 导入模块: from pyecharts import options as opts 准备数据: 大家可以自行导入数据使用. 绘制雷达图: randar

随机推荐