Вы можете сделать это с помощью приведенного ниже кода, и код в вашем вопросе на самом деле был очень близок к тому, что вам нужно, все, что вам нужно сделать, это вызвать cmap
объект, который у вас есть.
import matplotlib
cmap = matplotlib.cm.get_cmap('Spectral')
rgba = cmap(0.5)
print(rgba) # (0.99807766255210428, 0.99923106502084169, 0.74602077638401709, 1.0)
Для значений вне диапазона [0.0, 1.0] он вернет нижний и верхний цвета (соответственно). По умолчанию это минимальный и максимальный цвет в диапазоне (то есть 0,0 и 1,0). Это значение по умолчанию можно изменить с помощью cmap.set_under()
и cmap.set_over()
.
Для «специальных» чисел, таких как np.nan
и, np.inf
по умолчанию используется значение 0.0, это можно изменить, используя cmap.set_bad()
аналогично under и over, как указано выше.
Наконец, вам может понадобиться нормализовать ваши данные так, чтобы они соответствовали диапазону [0.0, 1.0]
. Это можно сделать, используя matplotlib.colors.Normalize
просто, как показано в небольшом примере ниже, где аргументы vmin
и vmax
описания, какие числа должны быть сопоставлены с 0,0 и 1,0 соответственно.
import matplotlib
norm = matplotlib.colors.Normalize(vmin=10.0, vmax=20.0)
print(norm(15.0)) # 0.5
Логарифмический нормализатор ( matplotlib.colors.LogNorm ) также доступен для диапазонов данных с большим диапазоном значений.
(Спасибо Джо Кингтону и Тэсвеллу за предложения о том, как улучшить ответ.)
cmap.set_under('red'); print cmap(0.0), cmap(-0.01)
set_bad
которые определяют, что делает дляnp.nan
иnp.inf
IIRC. Вы должны также упомянутьNormalize
методы здесь.module 'matplotlib' has no attribute 'cm'
, попробуйте заменить первые две строки наimport matplotlib.pyplot as plt; cmap = plt.cm.get_cmap('Spectral')
Чтобы получить целочисленное значение rgba вместо значения с плавающей запятой, мы можем сделать
Таким образом, чтобы упростить код на основе ответа от Ffisegydd, код будет выглядеть следующим образом:
источник
Чтобы построить решения от Ffisegydd и amaliammr , вот пример, где мы делаем представление CSV для пользовательской карты цветов:
источник
Для полноты вот те варианты cmap, с которыми я столкнулся:
источник