Как добавить цветные полосы на график интенсивности оттенков - PullRequest
0 голосов
/ 05 апреля 2019

Я хочу создать график интенсивности оттенков. то есть изображение, на котором одно изображение показано как цвет (оттенок), а другое - яркость (интенсивность). У меня есть метод для этого, но я хочу количественно определить график с помощью цветных полос. Один для данных оттенков и один для данных интенсивности.

Я пытался добавить цветные полосы, используя метод fig.add_axes. Но это приводит к тому, что цветные полосы не вписываются в фигуру и требуют изменения положения. Это особенно неприятно при попытке показать изображения разных размеров, поскольку цветные полосы оказываются в другом месте относительно изображения.

from matplotlib import colors, cm, pyplot as plt
import matplotlib
import numpy as np

# Generate some random data
intensity = np.random.rand(10, 10)
colour = np.random.rand(10, 10)


norm_c = colors.Normalize(vmin=colour.min(), vmax=colour.max()) # Set hue range
cmap_c = cm.coolwarm # Choose colormap for hues
m = cm.ScalarMappable(norm=norm_c, cmap=cmap_c)
c_rgb = m.to_rgba(colour) # get RGB values


norm_i = matplotlib.colors.Normalize(vmin=intensity.min(), vmax=intensity.max()) # Set itensity range
cmap_i = cm.gray # Leave this colormap - needs to be gray to show itensity
m = cm.ScalarMappable(norm=norm_i, cmap=cmap_i)
i_rgb = m.to_rgba(intensity) # Get RGB values

# Convert to HSV
c_hsv = colors.rgb_to_hsv(c_rgb[:,:,:-1])
i_hsv = colors.rgb_to_hsv(i_rgb[:,:,:-1])

# Use colour as hue and intensity as value
tot_hsv = np.copy(c_hsv)
tot_hsv[:,:,-1] = i_hsv[:,:,-1]
tot_rgb = colors.hsv_to_rgb(tot_hsv) # Convert back to RGB

fig = plt.figure()
ax = fig.add_subplot(111) # Have to use this method for use with another package (astropy projection)
im = ax.imshow(tot_rgb, origin='lower') # Show hue-intensity image

# Attempt at colorbars
cax1 = fig.add_axes([0.8,0.11,0.05,0.77])
cb2 = matplotlib.colorbar.ColorbarBase(cax1, cmap=cmap_c, norm=norm_c, orientation='vertical')
cb2.set_label('Colour')

cax2 = fig.add_axes([0.9,0.11,0.05,0.77])
cb2 = matplotlib.colorbar.ColorbarBase(cax2, cmap=cmap_i, norm=norm_i, orientation='vertical')
cb2.set_label('Intensity')

output

Это приводит к появлению цветных полос сбоку (или сверху) изображения. Мне бы очень хотелось иметь более автоматизированное размещение цветовых полос.

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