Я пытаюсь создать гистограмму, где все столбцы, меньшие, чем самые большие, имеют мягкий цвет, а самый большой столбец - более яркий цвет. Хорошим примером является gif круговой диаграммы от darkhorse Analytics, где они разбить круговую диаграмму и закончить более четкой гистограммой. Любая помощь будет оценена, спасибо!
Как установить другой цвет для самой большой полосы на графике морского барботажа?
Ответы:
Просто передайте список цветов. Что-то типа
values = np.array([2,5,3,6,4,7,1])
idx = np.array(list('abcdefg'))
clrs = ['grey' if (x < max(values)) else 'red' for x in values ]
sb.barplot(x=idx, y=values, palette=clrs) # color=clrs)
(Как указано в комментариях, более поздние версии Seaborn используют «палитру», а не «цвет»)
[Случай Barplot] Если вы получаете данные из своего фрейма данных, вы можете сделать следующее:
labels = np.array(df.Name)
values = np.array(df.Score)
clrs = ['grey' if (x < max(values)) else 'green' for x in values ]
#Configure the size
plt.figure(figsize=(10,5))
#barplot
sns.barplot(x=labels, y=values, palette=clrs) # color=clrs)
#Rotate x-labels
plt.xticks(rotation=40)
Другие ответы определяли цвета до построения графика. Вы также можете сделать это потом, изменив саму полосу, которая является участком оси, которую вы использовали для графика. Чтобы воссоздать пример iayork:
import seaborn
import numpy
values = numpy.array([2,5,3,6,4,7,1])
idx = numpy.array(list('abcdefg'))
ax = seaborn.barplot(x=idx, y=values) # or use ax=your_axis_object
for bar in ax.patches:
if bar.get_height() > 6:
bar.set_color('red')
else:
bar.set_color('grey')
Вы также можете напрямую обращаться к бару, например, через ax.patches[7]
. С помощью dir(ax.patches[7])
вы можете отобразить другие атрибуты объекта-бара, которые вы могли бы использовать.
Как я это делаю:
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
bar = sns.histplot(data=data, x='Q1',color='#42b7bd')
# you can search color picker in google, and get hex values of you fav color
patch_h = []
for patch in bar.patches:
reading = patch.get_height()
patch_h.append(reading)
# patch_h contains the heights of all the patches now
idx_tallest = np.argmax(patch_h)
# np.argmax return the index of largest value of the list
bar.patches[idx_tallest].set_facecolor('#a834a8')
#this will do the trick.
Мне нравится это, а не установка цвета до или после, считывая максимальное значение. Нам не нужно беспокоиться о количестве патчей или о том, что является самым высоким значением. Обратитесь к matplotlib.patches.Patch ps: Я немного изменил приведенные здесь графики. Приведенный выше код не даст такого же результата.
color=
должно быть заменено наpalette=
18.09.2016