zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    hdu 4521 小明系列问题——小明序列(线段树 or DP)
    hdu 1115 Lifting the Stone
    hdu 5476 Explore Track of Point(2015上海网络赛)
    Codeforces 527C Glass Carving
    hdu 4414 Finding crosses
    LA 5135 Mining Your Own Business
    uva 11324 The Largest Clique
    hdu 4288 Coder
    PowerShell随笔3 ---别名
    PowerShell随笔2---初始命令
  • 原文地址:https://www.cnblogs.com/AlgrithmsRookie/p/11677614.html
Copyright © 2011-2022 走看看