Python 在matplot lib中格式化三维条形图

Python 在matplot lib中格式化三维条形图,python,matplotlib,colors,3d,axes,Python,Matplotlib,Colors,3d,Axes,我正在使用这个代码示例 from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import numpy as np data = np.array([ [0,1,0,2,0], [0,3,0,2,0], [6,1,1,7,0], [0,5,0,2,9], [0,1,0,4,0], [9,1,3,4,2], [0,0,2,1,3], ]) column_names = ['a','b','c','d','

我正在使用这个代码示例

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

data = np.array([
[0,1,0,2,0],
[0,3,0,2,0],
[6,1,1,7,0],
[0,5,0,2,9],
[0,1,0,4,0],
[9,1,3,4,2],
[0,0,2,1,3],
])

column_names = ['a','b','c','d','e']
row_names = ['Mon','Tue','Wed','Thu','Fri','Sat','Sun']

fig = plt.figure()
ax = Axes3D(fig)

lx= len(data[0])            # Work out matrix dimensions
ly= len(data[:,0])
xpos = np.arange(0,lx,1)    # Set up a mesh of positions
ypos = np.arange(0,ly,1)
xpos, ypos = np.meshgrid(xpos+0.25, ypos+0.25)

xpos = xpos.flatten()   # Convert positions to 1D array
ypos = ypos.flatten()
zpos = np.zeros(lx*ly)

dx = 0.5 * np.ones_like(zpos)
dy = dx.copy()
dz = data.flatten()

ax.bar3d(xpos,ypos,zpos, dx, dy, dz, color='b')

#sh()
ax.w_xaxis.set_ticklabels(column_names)
ax.w_yaxis.set_ticklabels(row_names)
ax.set_xlabel('Letter')
ax.set_ylabel('Day')
ax.set_zlabel('Occurrence')

plt.show()

我已经成功地根据我的需要对其进行了调整,现在我需要更改每列的颜色,以使我的数据更具可读性,如另一个示例所示,但由于图形是以完全不同的方式构造的,因此我无法理解如何将一个颜色应用到另一个图形中

基本上,您只需将一个颜色数组传递给
color=
。数组的每个元素都是一个条。因此,根据构建数组的方式,可以按
对条形图进行分组

例如:

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline

data = np.array([
[0,1,0,2,0],
[0,3,0,2,0],
[6,1,1,7,0],
[0,5,0,2,9],
[0,1,0,4,0],
[9,1,3,4,2],
[0,0,2,1,3],
])

column_names = ['a','b','c','d','e']
row_names = ['Mon','Tue','Wed','Thu','Fri','Sat','Sun']

fig = plt.figure()
ax = Axes3D(fig)

lx= len(data[0])            # Work out matrix dimensions
ly= len(data[:,0])
xpos = np.arange(0,lx,1)    # Set up a mesh of positions
ypos = np.arange(0,ly,1)
xpos, ypos = np.meshgrid(xpos+0.25, ypos+0.25)

xpos = xpos.flatten()   # Convert positions to 1D array
ypos = ypos.flatten()
zpos = np.zeros(lx*ly)

dx = 0.5 * np.ones_like(zpos)
dy = dx.copy()
dz = data.flatten()

cs = ['r', 'g', 'b', 'y', 'c'] * ly

ax.bar3d(xpos,ypos,zpos, dx, dy, dz, color=cs)

#sh()
ax.w_xaxis.set_ticklabels(column_names)
ax.w_yaxis.set_ticklabels(row_names)
ax.set_xlabel('Letter')
ax.set_ylabel('Day')
ax.set_zlabel('Occurrence')

plt.show()

很抱歉,我对python真的很陌生,但你能告诉我如何在一周中的某一天着色吗?我只是尝试反转矩阵,但我想不出来out@PeterDoro要按一周中的哪一天分组,您可以使用如下颜色数组
cs=['r','r','r','r','g','g','g','b','b','b','b','y','y','y','y','c','c','c','c','c','c','k','k','k','g','b','b','b','y','y','y','y','c','k','k','k','grey','grey','grey']
当然,这只在条数始终相同的情况下才有效。否则,您必须通过编程方式构建一个具有正确形状和正确颜色重复的数组,以匹配数据