您的位置:首页 > 编程语言 > Python开发

Python Matplotlib实现三维/四维数据的柱状图绘制

2017-08-07 21:34 1136 查看

Python Matplotlib实现三维/四维数据的柱状图绘制

一、背景

 最近查阅多维信息展示时,大致了解到三维信息可以用Matplotlib中的三维图像展示部分来实现,可是当涉及到三维以上的数据展示时,可采用雷达图来展示。雷达图可以展示多维信息。如下图所示:



  那么三维的柱形图,顶多可以展示X,Y,Z的信息,但是,在上一篇三维散点图的绘制的文章中提到其中的Color这个可以不仅仅局限于字符串,可以用变量来代替,因此颜色的冷到暖的色调变化过程是否可以做为一个新的维度的衡量标准呢?!



二、效果演示

  根据这一想法,我做出来的实际效果图如下图所示:



  其中自然包含Xlabel,Ylabel和Amplitude这三种变量,同时可以根据第四维的数据来控制Color这个变量,用颜色的深浅来展示数据的变化。如果只是三维变量的话可以将Color用来展示Amplitude这个数值,如果数值越大色调越暖,任然有较好的效果。在matplotlib的官网中,我看到一种效果展示相当喜欢,后期如果有时间可以研究一下。



三、实现步骤

  

  贴出代码,其中一些步骤给出了注释。参考代码是Matplotlib官网中的gallery里面的一个example,传送门

  本文代码基于上面分析改进,如下:

import scipy.io as sio
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

def Detectionplot():

data = sio.loadmat('F:\detection.mat')    #完成数据的导入
m = data['data']  #将其与m数组形成对应关系

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')   #此处因为是要和其他的图像一起展示,用的add_subplot,如果只是展示一幅图的话,可以用subplot即可

x = m[0]
y = m[1]
z = m[2]

x = x.flatten('F')   #flatten功能具体可从Declaration中看到
y = y.flatten('F')

#更改柱形图的颜色,这里没有导入第四维信息,可以用z来表示了
C = []
for a in z:
if a < 10:
C.append('b')
elif a < 20:
C.append('c')
elif a < 30:
C.append('m')
elif a < 40:
C.append('pink')
elif a > 39:
C.append('r')

#此处dx,dy,dz是决定在3D柱形图中的柱形的长宽高三个变量
dx = 0.6 * np.ones_like(x)
dy = 0.2 * np.ones_like(y)
dz = abs(z) * z.flatten()
dz = dz.flatten() / abs(z)
z = np.zeros_like(z)

#设置三个维度的标签
ax.set_xlabel('Xlabel')
ax.set_ylabel('Ylabel')
ax.set_zlabel('Amplitude')

ax.bar3d(x, y, z, dx, dy, dz, color=C, zsort='average')

plt.show()

Detectionplot()


August 7,2017
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息