python四维数据绘图_PythonMatplotlib实现三维四维数据的柱
状图绘制
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')
matplotlib中subplot#更改柱形图的颜⾊,这⾥没有导⼊第四维信息,可以⽤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
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论