怎么使用python绘制3D瀑布图

 更新时间:2024年09月25日 10:29:19   作者:ww大魔王丷  
这篇文章主要介绍了怎么使用python绘制3D瀑布图的相关资料,瀑布图是由麦肯锡顾问公司所独创的图表类型,因为形似瀑布流水而称之为瀑布图(Waterfall Plot),文中通过代码介绍的非常详细,需要的朋友可以参考下

成品:

代码:

import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
from mpl_toolkits.mplot3d.art3d import Poly3DCollection
import numpy as np

def line_3d(x, y, z, x_label_indexs):
    """
    在y轴的每个点,向x轴的方向延伸出一个折线面:展示每个变量的时序变化。
    x: x轴,时间维,右边。
    y: y轴,变量维,左边。
    z: z轴,数值维。二维矩阵,y列x行。每一行是对应变量的一个时间序列。
    x_label_indexs: 需要标注的时间点。
    """
    x_num = len(x)
    y_num = len(y)
    if z.shape[0] != y_num or z.shape[1] != x_num:
        return -1

    # 制作坐标格点(z中每个点对应的x、y坐标)
    X, Y = np.meshgrid(x, y)

    # 初始化
    canvas = plt.figure()  # 创建画布
    axs = canvas.add_subplot(111, projection='3d')  # 添加三维子图
    # 若把111改成234,则意思是:创建一个2*3的网格,并在第4个格子中创建一个axes

    # 绘制折线面
    for i in range(y_num):  # 遍历
        # z值线,即实际数据。
        axs.plot(Y[i], X[i], z[i], color=plt.cm.viridis(i/y_num),
                 linestyle='-', linewidth=1, marker='o', markersize=3, alpha=0.3)
        # 0值线(z=0),与“地面”连接。
        axs.plot(Y[i], X[i], np.zeros_like(z[i]), color='gray', alpha=0.5)

        # 绘制有颜色的平面:本质是填充z值与0值之间的区域。
        polygon = [
            [Y[i, 0], X[i, 0], 0],    # 左下
            [Y[i, -1], X[i, -1], 0],  # 右下
        ]
        for j in range(x_num-1, -1, -1):  # 依次添加点,使得polygon成为一个完整的闭合多边形
            polygon.append([Y[i, j], X[i, j], z[i, j]])
        axs.add_collection3d(Poly3DCollection([polygon], color=plt.cm.viridis(i/y_num), alpha=0.3))

        # 标注数字(z值)
        for k in x_label_indexs:
            axs.text(Y[i, k]-0.05, X[i, k], z[i, k]+0.02, f'{z[i, k]:.2f}',
                     color='black', ha='center', size=7)

    # 用虚线将需要标注的时间(y)连起来
    for k in x_label_indexs:
        axs.plot(Y[:, k], X[:, k], z[:, k], linestyle='--', linewidth=0.8, color='gray')

    axs.grid()
    plt.show()


if __name__ == '__main__':
    x = np.arange(5)
    time = np.arange(1, 15, 2)

    z = np.array(
        [
            [0.20, 0.34, 0.38, 0.43, 0.44, 0.50, 0.61],
            [0.21, 0.40, 0.38, 0.43, 0.60, 0.72, 0.75],
            [0.22, 0.43, 0.44, 0.60, 0.77, 0.84, 0.92],
            [0.23, 0.42, 0.44, 0.43, 0.64, 0.77, 0.86],
            [0.38, 0.42, 0.43, 0.49, 0.55, 0.60, 0.81]
        ]
    )

    line_3d(time, x, z, [1, 4, 6])

总结 

到此这篇关于怎么使用python绘制3D瀑布图的文章就介绍到这了,更多相关python绘制3D瀑布图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python数据分析之Matplotlib的常用操作总结

    Python数据分析之Matplotlib的常用操作总结

    Matplotlib是Python的绘图库,它可与NumPy一起使用,提供了一种有效的MatLab开源替代方案,下面这篇文章主要给大家介绍了关于Python数据分析之Matplotlib常用操作的相关资料,需要的朋友可以参考下
    2022-01-01
  • Python制作一个系统信息采集工具

    Python制作一个系统信息采集工具

    这篇文章主要为大家详细介绍了如何使用Python编写一个系统信息采集工具,好为重装系统做准备,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-12-12
  • 简单了解python关系(比较)运算符

    简单了解python关系(比较)运算符

    这篇文章主要介绍了简单了解python关系(比较)运算符,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • Python impor机制脚本模式vs模块模式完全解析

    Python impor机制脚本模式vs模块模式完全解析

    这篇文章主要介绍了Python impor机制脚本模式vs模块模式的相关资料,包括import的作用、脚本与模块的区别,以及绝对导入和相对导入的方法,需要的朋友可以参考下
    2026-05-05
  • Python生命游戏实现原理及过程解析(附源代码)

    Python生命游戏实现原理及过程解析(附源代码)

    这篇文章主要介绍了Python生命游戏实现原理及过程解析(附源代码),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • 详细整理python 字符串(str)与列表(list)以及数组(array)之间的转换方法

    详细整理python 字符串(str)与列表(list)以及数组(array)之间的转换方法

    这篇文章主要介绍了详细整理python 字符串(str)与列表(list)以及数组(array)之间的转换方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • Python处理文件写入时文件不存在的完整解决方案

    Python处理文件写入时文件不存在的完整解决方案

    在现代软件开发中,安全地处理文件操作是每个开发者必须掌握的核心技能,本文主要为大家详细介绍了Python处理文件写入时文件不存在相关解决方法,有需要的小伙伴可以了解下
    2025-09-09
  • Django+uni-app实现数据通信中的请求跨域的示例代码

    Django+uni-app实现数据通信中的请求跨域的示例代码

    这篇文章主要介绍了Django+uni-app实现数据通信中的请求跨域的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • TensorFlow实现非线性支持向量机的实现方法

    TensorFlow实现非线性支持向量机的实现方法

    本篇文章主要介绍了TensorFlow实现非线性支持向量机的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • Python入门篇之正则表达式

    Python入门篇之正则表达式

    正则表达式是一个很有用的工具,可处理复杂的字符匹配和替换工作。在Python中内置了一个re模块以支持正则表达式。本文我们就来详细探讨下Python中正则表达式。
    2014-10-10

最新评论