Закрасить гистограмму разным цветом
Подскажите, пожалуйста, каким способом можно раскрасить гистограмму используя параметр colormap чтобы отображалась вся палитра заданной темы, например тема - turbo?
Мой код:
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("test.csv", delimiter=";", encoding="utf-8").fillna("Null")
df.head()
vc = df["ID"].value_counts()
vc_id = (vc.loc[["79","787","20","125","119","89"]])
fig, ax_vc = plt.subplots(figsize=(16,8))
ax_vc.margins(y=0.45)
vc_id.plot(kind="bar", legend=False, colormap="turbo")
for i, perf in enumerate(vc_id):
ax_vc.text(i, perf + 8, str(perf), color="black", ha="center", fontweight="bold", fontname="serif", fontsize=10)
plt.yscale("log")
plt.xticks(rotation=0)
plt.show()
Для раскраски гистограммы использую параметр colormap="turbo", но гистограмма закрашивается только тем цветом, который идёт на 1ом месте в шкале цвета, т.е.:
Пробовал использовать подставку цветов через цикл:
colors = ["red" if i > 250 else "blue" for i in vc_id]
vc_id.plot(kind="bar", legend=False, color=colors)
Работает следующим образом:
Если добавить список цветов в переменную colors = ["red", "blue", "green"] то работает так:
Подскажите, пожалуйста, как всё таки использовать тему цветовой палитры в моём случае?
Большое спасибо.
Ответы (1 шт):
Ответ на ваш вопрос, как раскрасить столбцы в разные цвета при помощи colormap - почти никак.
Параметр colormap в DataFrame.plot определяет каким цветом рисовать каждую отдельную колонку. Так как у вас на чертеже только одна колонка, то все столбцы в случае colormap отрисовываются одним цветом.
Добавьте ещё пару колонок и посмотрите, что будет.
df = pd.DataFrame.from_dict(\
{79 : 699, 787: 390, 20: 191, 125: 163, 119: 119, 89: 146},
orient='index',
columns=['Count']
)
df["c1"] = [100,200,300,400,500,600]
df["c2"] = [600,500,400,300,200, 100]
fig, ax_vc = plt.subplots(figsize=(16,8))
ax_vc.margins(y=0.45)
df.plot(kind="bar", legend=False, colormap="turbo", ax=ax_vc);
Видите? У каждого набора свой цвет.
C параметром color дело обстоит хитрее. Когда у вас один набор данных, то цвета из color используются для раскрашивания отдельных столбцов, как у вас в примере. Если же наборов несколько, то цвета используются для выбора в какой цвет красить столбцы отдельных наборов.
df.plot(kind="bar", legend=False, color=["red", "green", "blue", "pink", "yellow", "black"])
Извлечь цвета из colormap
Однако не всё потеряно. Можно извлечь цвета из цветовой карты и задать их для каждого столбца индивидуально.
Объект типа Colormap можно вызвать как функцию, передав параметр от 0 до 1. В ответ карта вернёт цвет в кодировке RGBA, соответствующий параметру.
turbo_cm = matplotlib.cm.get_cmap('turbo')
colors = [turbo_cm(v) for v in np.linspace(0,1,len(df))]
df.Count.plot(kind="bar", legend=False, color=colors)





