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

yizhihongxing

以下是利用Python绘制数据的瀑布图的教程攻略:

什么是瀑布图

瀑布图(Waterfall chart)又称为桥形图,它适用于展示某一目标从初始数值一步步地增加或减少到最终数值的整个过程,是一种不常用的图表类型。

利用Python绘制瀑布图的步骤

绘制瀑布图的第一步是导入必要的库,包括pandas,matplotlib和numpy。接下来是读取数据并对其进行预处理,包括计算每一阶段的数值、颜色和标签。最后,使用plt.bar函数绘制瀑布图。

下面,我们将一步步学习如何使用Python完成这些步骤。

导入必要的库

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

读取数据并进行预处理

数据的格式应该是一个包含若干列和若干行的矩阵,其中每一行代表一个阶段,每个阶段包含了以下信息:

  • 阶段的名称
  • 阶段的数值变化(可以是增加或减少)
  • 阶段的颜色

例如,下面的数据表格显示了一个包含四个阶段的数据。

阶段 变化 颜色
第一阶段 100 红色
第二阶段 -20 黄色
第三阶段 -50 绿色
第四阶段 70 蓝色

我们可以使用pandas库读取这个数据,并对其进行处理,首先计算出每个阶段的值:

data = pd.DataFrame({'Stage': ['第一阶段', '第二阶段', '第三阶段', '第四阶段'], 'Change': [100, -20, -50, 70], 'Color': ['red', 'yellow', 'green', 'blue']})
data['Value'] = data['Change'].cumsum()
data = data[['Stage', 'Value', 'Change', 'Color']]

这里我们使用了pandas的cumsum函数,它可以对数据进行累加。对于这个数据来说,计算出来的值是[100,80,30,100]。

接下来,我们可以使用np.arange函数生成每个阶段的X轴坐标,将阶段名称作为Y轴坐标,并根据颜色信息设置瀑布图的每个部分的颜色信息。

x = np.arange(len(data))
y = data['Value'].values
colors = data['Color'].values

fig, ax = plt.subplots(figsize=(8, 6))

for i in range(len(x)):
    ax.bar(x[i], data['Change'][i], bottom=y[i], color=colors[i], width=0.5, align='center')
    if data['Change'][i] < 0:
        ax.text(x[i]+0.25, y[i]+(data['Value'][i+1]-data['Value'][i])/2, str(data['Value'][i+1]-data['Value'][i]), va='center')
    else:
        ax.text(x[i]+0.25, y[i]+(data['Value'][i]-data['Value'][i-1])/2, str(data['Value'][i]-data['Value'][i-1]), va='center')
plt.xticks(x, data['Stage'])

plt.show()

最后,我们使用plt.bar函数绘制瀑布图,设置每个部分的颜色和对齐方式,以及使用的字体。

示例一

让我们以一个更复杂的数据为例。假设我们有一个包含10个阶段的数据,每个阶段都包含名称、变化、颜色和注释。下面是这个数据的格式:

data=pd.DataFrame({'Stage':['第1个月','第2个月','第3个月','第4个月','第5个月','第6个月','第7个月','第8个月','第9个月','第10个月'],
                   'Change':[20,-10,-5,-10,-10,20,30,5,-20,-10],
                   'Color':['green','green','green','green','green','grey','grey','grey','grey','grey'],
                   'Note':['本月涨了20%','本月跌了10%','本月小跌了5%','本月大跌了10%','本月继续下跌10%','本月大涨20%','本月继续大涨30%','本月小涨了5%','本月下跌了20%','本月继续下跌了10%']})

我们可以使用和前一个示例相同的方法对数据进行预处理,并使用注释信息添加说明文本。

x = np.arange(len(data))
y = data['Value'].values
colors = data['Color'].values

fig, ax = plt.subplots(figsize=(16, 8))

for i in range(len(x)):
    ax.bar(x[i], data['Change'][i], bottom=y[i], color=colors[i], width=0.5, align='center')
    if data['Change'][i] < 0:
        ax.text(x[i]+0.25, y[i]+(data['Value'][i+1]-data['Value'][i])/2, str(data['Value'][i+1]-data['Value'][i]), va='center')
    else:
        ax.text(x[i]+0.25, y[i]+(data['Value'][i]-data['Value'][i-1])/2, str(data['Value'][i]-data['Value'][i-1]), va='center')
    ax.text(x[i], y[i]+data['Change'][i]+5, data['Note'][i], ha='center', va='bottom', fontsize=8)

plt.xticks(x, data['Stage'])
plt.title('Monthly Revenue')
plt.show()

示例二

下面,我们假设有一批商品,每个商品的售价都不同,我们希望使用瀑布图展示这些商品的销售额以及销售额的变化情况。在这个示例中,我们将使用CSV格式的数据文件,并使用pandas库进行数据读取。

首先,我们需要下载“商品数据.csv”文件(假设文件位置为~/Downloads/)。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_csv('~/Downloads/商品数据.csv')

x = np.arange(len(data))
y = data['Value'].values
colors = np.array(['grey']*len(data))
colors[data['Revenue']>0] = 'green'
colors[data['Revenue']<0] = 'red'

fig, ax = plt.subplots(figsize=(16, 8))

for i in range(len(x)):
    ax.bar(x[i], data['Revenue'][i], bottom=y[i], color=colors[i], width=0.5, align='center')
    ax.text(x[i], y[i]+data['Revenue'][i]+50, '${:,.0f}'.format(data['Revenue'][i]), ha='center', va='bottom', fontsize=10)

plt.xticks(x, data['Product'])
plt.title('Sales Performance')
plt.show()

代码说明

绘制瀑布图的关键是计算出每个阶段的值,然后使用plt.bar函数绘制瀑布图。对于每个瀑布图的部分,它的高度表示了该部分的价值,它的宽度表示了不同阶段之间的距离。

下面是每个参数的解释:

  • plt.bar()函数中的x值表示每个阶段在X轴上的位置,y值表示每个阶段的高度,也就是价值变化的数值。
  • bottom参数表示每个部分的起始高度,也就是前面部分的高度加上当前部分的价值。
  • color参数表示每个部分的颜色。
  • width参数表示每个部分的宽度。
  • align参数表示每个部分的对齐方式。
  • plt.text()函数用于添加注释,它的x值表示文本的位置,y值表示文本在Y轴上的位置,va参数表示文本的垂直对齐方式,ha参数表示文本的水平对齐方式。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用Python绘制数据的瀑布图的教程 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 在Python中Dataframe通过print输出多行时显示省略号的实例

    在Python中,当Dataframe中的数据量很大且需要输出多行时,由于显示的限制,可能会出现省略号 … 的情况。 为了解决这种问题,我们可以通过更改相关参数设置来控制输出Dataframe时是否显示省略号。 下面是两个实例,以更好的展示如何实现在Python中Dataframe通过print输出多行时显示省略号的方法。 实例一 首先,我们需要导入pa…

    python 2023年6月5日
    00
  • Python3对称加密算法AES、DES3实例详解

    下面是详细讲解“Python3对称加密算法AES、DES3实例详解”的完整攻略,包括算法原理、Python实现和两个示例。 算法原理 对称加密算法是一种常用的加密算法,其基本思想是使用同一个密钥对数据进行加密和解密。常用的对称加密算法包括AES、DES、3DES等。其中,AES是一种高级加密标准,其基本思想是使用一个密钥对数据进行加密和解密密钥长度可以是12…

    python 2023年5月14日
    00
  • Python实现的线性回归算法示例【附csv文件下载】

    当然,我非常乐意给你详细讲解一下这篇文章。 标题:Python实现的线性回归算法示例【附csv文件下载】 文章概述:这篇文章是介绍如何使用Python实现线性回归算法的教程,作者在文章中详细解释了线性回归的定义、原理以及如何使用Python编写代码实现线性回归算法。同时,作者还提供了一份CSV文件的下载链接,为读者提供了使用此代码所需要的测试数据。 正文: …

    python 2023年6月3日
    00
  • 简单介绍Python虚拟环境及使用方法

    Python虚拟环境是一种常用的Python开发工具,可以用于隔离不同项目的依赖关系,避免不同项目之间的依赖冲突。本文将详细讲解Python虚拟环境的概念、使用方法和示例。 Python虚拟环境的概念 Python虚拟环境是一种隔离Python环境的工具,可以在同一台机器上创建多个独立的Python环境,每个环境都有自己的Python解释器和依赖库。Pyth…

    python 2023年5月15日
    00
  • Python 如何限制输出日志的大小

    限制Python输出日志的大小,是通过设置日志记录器的处理器来实现的。可以通过Python内置的logging模块来实现这个目标。具体步骤如下: 1. 创建日志记录器 使用logging.getLogger()方法创建一个记录器对象。可以为这个记录器对象设置名称,方便后续调用和管理。 import logging logger = logging.getLo…

    python 2023年6月5日
    00
  • python线程的几种创建方式详解

    我来详细讲解一下“Python线程的几种创建方式详解”的攻略。 简介 Python线程是指在一个程序内部,同时执行多个不同的线程以完成不同任务的一种机制。使用线程能够提高程序的运行效率,因为它可以同时执行多个任务,使得程序可以在某些任务被阻塞时,继续执行其他任务。 Python线程的创建方式有以下几种: 使用threading.Thread类创建线程对象 继…

    python 2023年5月19日
    00
  • 基于Python实现英语单词小游戏

    基于Python实现英语单词小游戏攻略 简介 本小游戏的目标是通过回答英语单词的问题,来帮助玩家提升英语单词记忆能力。游戏使用Python编写,需要玩家在命令行中使用Python运行程序来开始游戏。 游戏规则 游戏分为两个阶段: 学习阶段:程序会显示一个单词,然后询问玩家该单词的意思; 测试阶段:程序会随机显示一个中文词汇,然后询问玩家该词汇的英文单词。 玩…

    python 2023年5月19日
    00
  • Python入门教程(十六)Python的if逻辑判断分支

    我来为您详细讲解“Python入门教程(十六)Python的if逻辑判断分支”的完整攻略。 什么是if逻辑判断分支 在编写代码的过程中,经常需要根据条件的结果来决定程序的执行路径,这时就需要使用if语句进行逻辑判断分支。if语句可以根据条件的真假执行不同的语句块,这种根据条件判断执行路径的语句就称为分支语句。 在Python中,if语句的基本结构如下: if…

    python 2023年6月5日
    00
合作推广
合作推广
分享本页
返回顶部