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

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