• Python-绘制3D柱形图


    Python-绘制3D柱形图

      本文主要讲解如何使用python绘制三维的柱形图,可以得到图1所示的效果。

    图1

      源代码如下:

     1 import numpy as np
     2 import matplotlib.pyplot as plt
     3 from mpl_toolkits.mplot3d import Axes3D
     4 
     5 #构造需要显示的值
     6 X=np.arange(0, 5, step=1)#X轴的坐标
     7 Y=np.arange(0, 9, step=1)#Y轴的坐标
     8 #设置每一个(X,Y)坐标所对应的Z轴的值,在这边Z(X,Y)=X+Y
     9 Z=np.zeros(shape=(5, 9))
    10 for i in range(5):
    11     for j in range(9):
    12         Z[i, j]=i+j
    13 
    14 xx, yy=np.meshgrid(X, Y)#网格化坐标
    15 X, Y=xx.ravel(), yy.ravel()#矩阵扁平化
    16 bottom=np.zeros_like(X)#设置柱状图的底端位值
    17 Z=Z.ravel()#扁平化矩阵
    18 
    19 width=height=1#每一个柱子的长和宽
    20 
    21 #绘图设置
    22 fig=plt.figure()
    23 ax=fig.gca(projection='3d')#三维坐标轴
    24 ax.bar3d(X, Y, bottom, width, height, Z, shade=True)#
    25 #坐标轴设置
    26 ax.set_xlabel('X')
    27 ax.set_ylabel('Y')
    28 ax.set_zlabel('Z(value)')
    29 plt.show()

      代码解读:

    1、构造需要显示的数据

      如下图所示,X坐标取值为[0,1,2,3,4],Y坐标取值为[0,1,2,3,4,5,6,7,8],每一个(X,Y)组合的值Z=X+Y,所需要绘制的图就是在X,Y所对应的坐标位置上面根据Z的值来绘制柱形图。

    2、坐标设置

      将坐标网格化, X=[0,1,2,3,4],Y=[0,1,2,3,4,5,6,7,8]网格化的结果,如下图所示。可以理解为,X参照Y进行了广播(broadcast), Y参照X进行了广播,分别添加了一个新的维度,并且进行复制。结合xx和yy就得到了所有的X,Y的坐标组合,经过扁平化之后这种对应关系保持不变。代码中的bottom是用来设置绘制每一个柱子的Z坐标的,在此全部都设置为0,而width和height设置每一个柱子的长和宽。

    3、bar3d

    ax.bar3d(X, Y, bottom, width, height, Z, shade=True):
    X,Y:柱子在XY平面的起始坐标
    bottom:柱子在Z轴上的起始坐标
    width、height:柱子的长宽
    Z:数字沿Z轴的长度
    shade:是否显示阴影(设置为True立体效果会更好)

    shde=True

    shade=False

    如果需要绘制多个子图,并且里面每一个子图都是3D的,只需要将上述代码进行些许修改即可,案例如下:
     1     fig=plt.figure()
     2     ax=fig.add_subplot(1, 3, 1, projection='3d')
     3     ax.bar3d(x, y, z, width, height, top, shade=True)
     4 
     5     ax=fig.add_subplot(1, 3, 2, projection='3d')
     6     ax.bar3d(x, y, z, width, height, top2, shade=True)
     7 
     8     ax=fig.add_subplot(1, 3, 3, projection='3d')
     9     ax.bar3d(x, y, z, width, height, top3, shade=True)
    10 
    11     plt.show()
  • 相关阅读:
    HTML学习笔记
    "IIS无法启动"问题解决方法
    NET访问MySQl数据库中文乱码解决
    珍爱生命,远离肥胖,远离过劳死
    Bcp 命令注意事项
    阿里云万郁香:多样付费选择构筑成本最优的弹性体验
    性能提升40%!阿里云神龙大数据加速引擎获TPCxBB世界排名第一
    阿里云王志坤:强劲可靠、无处不在的云,为创新保驾护航
    发现新视界——视觉计算将如何改变生产方式
    Soul运维总监尤首智:企业如何从0到1建设云上运维体系
  • 原文地址:https://www.cnblogs.com/AlgrithmsRookie/p/11677614.html
Copyright © 2020-2023  润新知