如果条件为真,则如何更改单个条的颜色matplotlib

pso*_*res 8 python matplotlib

我一直在谷歌寻找是否有可能只改变matplotlib制作的图形中的条形颜色.想象一下这个图:

替代文字

假设我已经评估了1到10,并且当用户选择评估时,我会生成一个图表.对于每次评估,其中一个男孩将获胜.
因此,对于每个图表,我想以不同的颜色离开获胜者栏,让我们说吉姆赢得了评价1.吉姆酒吧是红色的,其他人是蓝色的.

我有一个带有值的字典,我试图做的是这样的:

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)
Run Code Online (Sandbox Code Playgroud)

有人知道这样做的方法吗?

提前致谢 :)

GWW*_*GWW 22

你需要使用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()
Run Code Online (Sandbox Code Playgroud)

是一个完整的例子,显示你想要的.

回答你的评论:

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)
Run Code Online (Sandbox Code Playgroud)


Pad*_*ddy 15

对于seaborn,您可以执行以下操作:

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)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

对于 matplotlib:

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()
Run Code Online (Sandbox Code Playgroud)

  • Paddy 的解决方案也适用于 Matplotlib: plt.bar(idx, values, color=clrs) (6认同)