Из bar3d docs, цвет применяется в каждую грань,
цвета может быть:
Массива цветов длиной N стержней, чтобы цвет каждого бара независимо друг от друга.
Я предполагаю, что это просто лицо, оно не предполагается передавать информацию, и bar3d ничего не возвращает. Такие вещи, как контур, возвращают ScalarMappable
, которые могут использоваться для указания цветовой панели. Похоже, что ваш cmap (который, как я полагаю, является cm.ScalarMappable
?), Не содержит нормы и автомасштаба, требуемых для colorbar.
Как работа вокруг вас может сделать Colorbar самостоятельно между определенными пределами, как в этом example
fig.subplots_adjust(bottom=0.25)
ax1 = fig.add_axes([0.05, 0.10, 0.9, 0.1])
norm = mpl.colors.Normalize(vmin=dz.min(), vmax=dz.max())
cb1 = mpl.colorbar.ColorbarBase(ax1, cmap=mpl.cm.cool,
norm=norm,
orientation='horizontal')
, где минимум и максимум для dz
указать диапазон, который согласуется с вашими данными.
EDIT: добавлен минимальный рабочий пример, в котором вы указываете цветовой код, используйте его для получения штрих-цветов и добавьте этот цветной снизу.
from mpl_toolkits.mplot3d import Axes3D
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x, y = np.random.rand(2, 100) * 4
hist, xedges, yedges = np.histogram2d(x, y, bins=4)
elements = (len(xedges) - 1) * (len(yedges) - 1)
xpos, ypos = np.meshgrid(xedges[:-1]+0.25, yedges[:-1]+0.25)
xpos = xpos.flatten()
ypos = ypos.flatten()
zpos = np.zeros(elements)
dx = 0.5 * np.ones_like(zpos)
dy = dx.copy()
dz = hist.flatten()
#Define colormap and get values for barcolors from it
cmap = plt.cm.RdYlBu_r
norm = mpl.colors.Normalize(vmin=dz.min(), vmax=dz.max())
barcolors = plt.cm.ScalarMappable(norm, cmap)
#Plot bar3d
ax.bar3d(xpos, ypos, zpos, dx, dy, dz, color=barcolors.to_rgba(dz),alpha=0.4,linewidth=0.5, zsort='average')
#Add colorbar
fig.subplots_adjust(bottom=0.25)
ax1 = fig.add_axes([0.05, 0.10, 0.9, 0.1])
cb1 = mpl.colorbar.ColorbarBase(ax1, cmap=cmap,
norm=norm,
orientation='horizontal')
plt.show()
Что дает,
Я использовал 'цвет = cmap.to_rgba (DZ)', а откладывая 'бар-chart', чтобы на вашем примере, когда я пытаюсь поставить' CMAP = CMAP .to_rgba' также сбой. Любая идея, как я могу поместить 'rgba' в' cmap'. – diffracteD
Я добавил минимальный пример того, как вы могли это сделать, идея заключается в том, что вы выбираете 'cmap', получаете от него цвета бара и затем рисуете« colorbar »для всего диапазона (в соответствии с диапазоном' dz 'bar значения" внизу. –