matplotlib 如果条件为True,如何更改单个条形图的颜色

vql8enpb  于 2023-11-22  发布在  其他
关注(0)|答案(2)|浏览(147)

在matplotlib制作的图形中,是否可以只改变单个条形图的颜色?


的数据
假设我有从1到10的评价,当用户选择评价时,我会为每一个评价生成一个图,对于每一个评价,这些男孩中的一个将获胜。
所以对于每个图表,我想让赢家栏用不同的颜色,假设Jim赢得了评估1,Jim栏是红色的,其他的是蓝色的。
我有一个字典的价值观,我试图做的是这样的:

for value in dictionary.keys(): # keys are the names of the boys
    if winner == value:
        facecolor = 'red'
    else:
        facecolor = 'blue'

ax.bar(ind, num, width, facecolor=facecolor)

字符串
有人知道怎么做吗?

4nkexdtk

4nkexdtk1#

您需要使用color而不是facecolor。您还可以将颜色指定为列表而不是标量值。因此,对于您的示例,您可以使用color=['r','b','b','b','b']
比如说,

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)

N = 5
ind = np.arange(N)
width = 0.5
vals = [1,2,3,4,5]
colors = ['r','b','b','b','b']
ax.barh(ind, vals, width, color=colors)

plt.show()

字符串
是一个完整的例子,告诉你你想要什么。
回复您的评论:

colors = []
for value in dictionary.keys(): # keys are the names of the boys
    if winner == value:
        colors.append('r')
    else:
        colors.append('b')

bar(ind,num,width,color=colors)

pexxcrt2

pexxcrt22#

对于seaborn,您可以这样做:

import seaborn as sns
import numpy as np

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 ]
sns.barplot(x=idx, y=values, palette=clrs) # color=clrs)

字符串


的数据
对于matplotlib:

import numpy as np
import matplotlib.pyplot as plt

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 ]
plt.bar(idx, values, color=clrs, width=0.4)
plt.show()

相关问题