Изменение цвета текста в зависимости от значения на ax.text - PullRequest
0 голосов
/ 14 февраля 2019

Я строю горизонтальную гистограмму с процентами, но хотел бы, чтобы значения> 0 были окрашены в зеленый цвет, а негативы - в красный.

plt.figure(figsize=(10,6))

clrs = ['b' if (x > 10) else 'gray' for x in data2['BASE VOLUME %']]
ax = sns.barplot(x,y, data=data2, palette=clrs)
ax.set_xlabel('Base Volume',fontsize=15)
ax.set_ylabel('Color Group',fontsize=15)
plt.xticks(fontsize=15)
plt.yticks(fontsize=15)

for i, v in enumerate(data2['BASE VOLUME %']):
    ax.text(0 + 0.01*max(data['BASE VOLUME']), i + len(data2)/50, str("{0:.1f}%".format(v)), color='black', fontweight='bold', fontsize=14)

for i, v in enumerate(diff['% Change from last month']):
    ax.text(1.06*max(data['BASE VOLUME']), i + len(data2)/50, str("{0:.1f}%".format(v)), color='red', fontweight='bold', 

См. График ниже.Значения 21,5%, 10,0% и т. Д. Должны быть зеленого цвета.

При попытке ввода строки colors = ['r' if (y < 0) else 'g' for y in diff['% Change from last month'].values] и изменении color='red' на color='colors'

я получаю сообщение об ошибке: ValueError: Invalid RGBA argument: ('g', 'r', 'g', 'r', 'r', 'r', 'r', 'r', 'r', 'r', 'r') all red

1 Ответ

0 голосов
/ 14 февраля 2019

В строке

for i, v in enumerate(diff['% Change from last month']):
    ax.text(1.06*max(data['BASE VOLUME']), i + len(data2)/50, str("{0:.1f}%".format(v)), color='red', fontweight='bold', fontsize=14)

вы можете попробовать оператор if-else, например

for i, v in enumerate(diff['% Change from last month']):
    if v > 0:
        ax.text(1.06*max(data['BASE VOLUME']), i + len(data2)/50, str("{0:.1f}%".format(v)), color='g', fontweight='bold', fontsize=14)

    else:
        ax.text(1.06*max(data['BASE VOLUME']), i + len(data2)/50, str("{0:.1f}%".format(v)), color='r', fontweight='bold',
...