2016-07-12 4 views
2

Я не могу найти правильный способ установить cmap (или цвета) для 3D-графика в matplotlib в моем ноутбуке iPython. Я могу правильно настроить диаграмму (28 x 7 меток) в плоскости X и Y с некоторыми случайными значениями 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 этикеток. Как я могу настроить различные «случайные» CMAP цвета для каждой из меток в x_data, все еще держа

ax.bar3d

параметр? Ниже приведен вариант с использованием

ax.bar

и различные цвета, но то, что мне нужно, это ax.bar3d. enter image description here

+0

Я дала ответ на [этот вопрос] (http://stackoverflow.com/questions/43869751/change-bar-color-in-a-3d- bar-plot-in-matplotlib-based-on-value), которые также могут быть интересны в этом контексте. – 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