2016-07-12 160 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