2016-07-12 73 views
2

我找不出在我的iPython笔记本中为matplotlib中的3d条形图设置cmap(或多种颜色)的正确方法。我可以在X和Y平面上正确设置我的图表(28 x 7标签),并带有一些随机的Z值。该图很难解释,其中一个原因是x_data标签[1,2,3,4,5]的默认颜色都是相同的。定义Matplotlib 3D条形图的颜色

下面是代码:

%matplotlib inline 
from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 
import numpy as npfig = plt.figure(figsize=(18,12)) 

ax = fig.add_subplot(111, projection='3d') 

x_data, y_data = np.meshgrid(np.arange(5),np.arange(3)) 
z_data = np.random.rand(3,5).flatten() 

ax.bar3d(x_data.flatten(), 
y_data.flatten(),np.zeros(len(z_data)),1,1,z_data,alpha=0.10) 

将会产生如下图:

enter image description here

我不想手动定义颜色的标签x_data。我怎样才能设置为每个x_data标签的不同的“随机” CMAP颜色,仍保持

ax.bar3d

参数?下面是一个使用

ax.bar

和不同颜色的变化,但我需要的是ax.bar3denter image description here

+0

我提供了答案为[这个问题](http://stackoverflow.com/questions/43869751/change-bar-color-in-a-3d-基于matplotlib的基于价值的条形图),这在这种情况下也可能是相互影响的。 – ImportanceOfBeingErnest

回答

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

fig = plt.figure(figsize=(18,12)) 
ax = fig.add_subplot(111, projection='3d') 

x_data, y_data = np.meshgrid(np.arange(5),np.arange(3)) 
z_data = np.random.rand(3,5) 
colors = ['r','g','b'] # colors for every line of y 

# plot colored 3d bars 
for i in xrange(3): # cycle though y 
    # I multiply one color by len of x (it is 5) to set one color for y line 
    ax.bar3d(x_data[i], y_data[i], z_data[i], 1, 1, z_data[i], alpha=0.1, color=colors[i]*5) 
    # or use random colors 
    # ax.bar3d(x_data[i], y_data[i], z_data[i], 1, 1, z_data[i], alpha=0.1, color=[np.random.rand(3,1),]*5) 
plt.show() 

结果: enter image description here

+0

谢谢,但这不是一个好的解决方案,因为它指定'r','g','b'。我的真实数据集有3到100个标签,需要自己的颜色。由于我不知道剧情的大小,因此解决方案需要考虑相应的自动调色板选项。 –

+1

您可以使用随机颜色,如上所示。 – Serenity