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

以下是利用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 if else语句嵌套实例说明

    在Python中,if语句可以嵌套,这允许您编写更复杂的条件语句。if语句的嵌套语法与其他编程语言非常相似,即在一个if语句块内嵌套另一个if语句块。 以下是一个示例: age = 20 if age > 18: print("成年人") if age > 21: print("可以购买酒精饮料") eli…

    2023年2月15日
    00
  • Python 语言实现六大查找算法

    下面是关于“Python语言实现六大查找算法”的完整攻略。 1. 六大查找算法 六大查找算法是指顺序查找、二分查找、插值查找、斐波那契查找、树表查找和哈希查找这六种常用的查找算法。这些算法是计算机科学中最基本的算法之一,也是Python开发者必须掌握的算法之一。 2. 算法实现 下面是使用Python实现六大查找算法的完整代码。 2.1 顺序查找 def s…

    python 2023年5月13日
    00
  • Python编程利用科赫曲线实现三维飘雪效果示例过程

    首先,需要明确一下科赫曲线和三维飘雪效果的概念。 科赫曲线是一种无限迭代的分形曲线,是由简单的线段不断缩放、旋转和复制形成的,具有自相似和自同构的性质。它可以用递归函数实现,是非常具有美感和趣味性的数学曲线。 三维飘雪效果是指将二维的雪花动画效果转化为三维的立体效果,通过模拟雪花在空中的运动和旋转,使整个效果更加逼真和有趣。 现在,我们来详细讲解一下如何利用…

    python 2023年5月19日
    00
  • Python 打印双端队列

    【问题标题】:Python Printing a DequePython 打印双端队列 【发布时间】:2023-04-02 22:50:02 【问题描述】: 我有一个完整的 Deque Array 类,如下所示: from collections import deque import ctypes class dequeArray: DEFAULT_CAP…

    Python开发 2023年4月8日
    00
  • python opencv肤色检测的实现示例

    下面是“Python OpenCV肤色检测的实现示例”的完整攻略: 简介 在计算机视觉领域,人体肤色检测是一个重要的问题,其应用涉及人脸识别、人体检测、人体姿态估计等领域。本文将介绍如何使用Python OpenCV实现肤色检测。 实现步骤 安装Python OpenCV Python OpenCV是Python支持的计算机视觉库,我们需要先安装它。 pip…

    python 2023年6月6日
    00
  • Python中的SOLID原则实例详解

    当我们在开发Python应用程序时,遵循SOLID原则可以使得代码更加易于维护和扩展。本文将深入讲解SOLID原则及其在Python中的应用。 SOLID原则介绍 SOLID原则是面向对象设计和编程原则的一个缩写,由五条原则组成:单一职责原则(Single Responsibility Principle),开闭原则(Open-Closed Principl…

    python 2023年5月20日
    00
  • python入门教程 python入门神图一张

    Python入门教程 这篇文章是一张 Python 入门神图的详细讲解。Python 是一种高级编程语言,具有易读易写、简洁明了、可扩展性强等优势,在Web开发、科学计算、数据处理等领域广泛应用。 下面我们来一步一步学习这张 Python 入门神图。 第1步:安装Python Python官网提供了Windows、macOS、Linux等多种版本的安装包,你…

    python 2023年5月13日
    00
  • 跟老齐学Python之一个免费的实验室

    跟老齐学Python之一个免费的实验室 简介 这是一篇关于如何使用老齐的免费 Python 实验室的攻略。老齐是一位非常有经验的 Python 开发者,他开设了一个免费的 Python 实验室,可以让学习者在实践中掌握 Python 技能。在这个实验室中,你可以练习各种 Python 编程实践,包括基本语法,函数,类,模块,以及一些常用的算法和数据结构。 步…

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