Как использовать matplotlib для рисования 3D барплота с определенным цветом в зависимости от высоты бара - PullRequest
0 голосов
/ 06 мая 2018

enter image description here

Привет, ребята, я использую matplotlib для рисования 3D барплота. Интересно, можно ли дать каждому бару (всего 9) разные цвета в зависимости от их значения (dz), а также показать соответствующий уровень на этом рисунке.

Большое спасибо заранее !!!

Мой код ниже:

fig_stat=plt.figure(dpi=100)
ax_stat = fig_stat.add_subplot(111, projection='3d')

xpos = [1, 1, 1, 3, 3, 3, 5, 5, 5]
ypos = [1, 3, 5, 1, 3, 5, 1, 3, 5]
# initial z position (x-y plane), np.zeros(x), x
zpos = [0, 0, 0, 0, 0, 0, 0, 0, 0]
# x is the number of points you need

dx = np.ones(9)
dy = np.ones(9)
# dz = [1, 2, 3, 4, 10, 6, 7, 8, 9]  # signal intensity
dz = col_stat.iloc[:, -2]
ax_stat.set_xlabel('X axis')
ax_stat.set_ylabel('Y axis')
ax_stat.set_zlabel('Signal Intensity')
ax_stat.bar3d(xpos, ypos, zpos, dx, dy, dz, color='#00ceaa')
plt.title("Position_{}".format(L)) 

1 Ответ

0 голосов
/ 07 мая 2018

Метод bar3d позволяет в качестве цвета ввести массив той же длины, что и массивы данных. Следовательно, цветовая карта может использоваться для получения цветов, соответствующих каждому dz:

from matplotlib import cm
from matplotlib.colors import Normalize
cmap = cm.get_cmap('plasma')
norm = Normalize(vmin=min(dz), vmax=max(dz))
colors = cmap(norm(dz))

И используйте это colors в качестве ввода в параметре цвета bar3d вместо '#00ceaa'. После этого цветная полоса может быть показана с помощью этого кода:

sc = cm.ScalarMappable(cmap=cmap,norm=norm)
sc.set_array([])
plt.colorbar(sc)

Который будет генерировать сюжет, похожий на этот:

bar cmap

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...