как изменить цвет одного столбца, если условие истинно matplotlib - PullRequest
8 голосов
/ 30 сентября 2010

Я пытался выяснить, возможно ли изменить только цвет столбца на графике, созданном matplotlib. Представьте себе этот график:

alt text

Допустим, у меня есть оценка от 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)

Кто-нибудь знает способ сделать это?

Заранее спасибо:)

Ответы [ 2 ]

20 голосов
/ 30 сентября 2010

Вам нужно использовать 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)
1 голос
/ 19 марта 2019

для морского рожка вы можете сделать что-то вроде этого:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...