如何为seaborn barplot中最大的酒吧设置不同的颜色?

时间:2015-06-26 13:41:02

标签: python bar-chart seaborn

我正在尝试创建一个条形图,其中所有小于最大的条形都是一些淡淡的颜色,最大的条形是更鲜明的颜色。一个很好的例子是黑马分析pie chart gif,它们分解饼图并以更清晰的条形图结束。任何帮助将不胜感激,谢谢!

4 个答案:

答案 0 :(得分:22)

只需传递一系列颜色即可。像

这样的东西
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)

enter image description here

(正如评论中所指出的,Seaborn的后续版本使用“调色板”而不是“颜色”)

答案 1 :(得分:4)

[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)

答案 2 :(得分:1)

其他答案定义了绘图前 的颜色。您还可以通过更改条形图本身之后进行此操作,该条形图是您用于绘图的轴的修补程序。重新创建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]),您可以显示可以利用的条形对象的其他属性。

答案 3 :(得分:1)

我该怎么做:

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 My results ps:我已经定制了这里给出的地块。上面给出的代码不会产生相同的结果。