Я делаю планку, и я хочу, чтобы цвета баров менялись от красного до синего в соответствии с цветовым градиентом. У меня есть размер кадра данных, который говорит мне, где в красно-синей шкале каждый бар должен быть. Мой текущий метод состоит в том, чтобы вручную преобразовать эти значения в цвета RGB, линейно интерполируя между красными и синими цветами RGB, но я хочу, чтобы автоматический способ преобразования моих числовых значений в цветовой шкале. Мне также нужно иметь легенду цвета, чтобы помочь ее интерпретировать.
Как преобразовать числа в цветовой шкале в matplotlib?
Ответ 1
Довольно просто создать диаграмму и установить цвета столбцов в соответствии со значением из кадра данных. color
matplotlib.Axes.bar
и экземпляр нормализации помогают преобразовать значения в цвета, которые понимаются аргументом color
в matplotlib.Axes.bar
. Цветовая полоса затем создается из ScalarMappable
используя ту же нормализацию и ScalarMappable
что и ScalarMappable
.
import matplotlib.pyplot as plt
import matplotlib.colors
import numpy as np; np.random.seed(0)
import pandas as pd
x = np.arange(12)
y = np.random.rand(len(x))*51
c = np.random.rand(len(x))*3+1.5
df = pd.DataFrame({"x":x,"y":y,"c":c})
cmap = plt.cm.rainbow
norm = matplotlib.colors.Normalize(vmin=1.5, vmax=4.5)
fig, ax = plt.subplots()
ax.bar(df.x, df.y, color=cmap(norm(df.c.values)))
ax.set_xticks(df.x)
sm = plt.cm.ScalarMappable(cmap=cmap, norm=norm)
sm.set_array([]) # only needed for matplotlib < 3.1
fig.colorbar(sm)
plt.show()
Для использования пользовательской цветовой карты с гистограммами см. Барплот, окрашенный в соответствии с цветовой картой?