Цветовая гистограмма matplotlib на основе значения строки оси - PullRequest
0 голосов
/ 17 мая 2018

У меня есть горизонтальная гистограмма, и я хочу выделить определенные столбцы (с уникальными цветами) на основе строковых значений. Я пробовал использовать функцию 'axhspan' или использовать маски, но ни одна из них не работает хорошо с тиковыми строками. Я знаю, что есть аналогичные вопросы для случаев, когда галочками являются числа (int, float), а не строка.

В моем случае у меня есть данные для 50 стран, и я хочу выделить несколько групп стран другим цветом. Например: США, Канада с желтым; Франция, Великобритания с синим цветом; Япония, Гонконг с апельсином и т.д ..

Вот упрощенная версия моего кода, может кто-нибудь показать мне, как установить другой цвет для подгруппы (например, 'us' и 'canada'). Спасибо!

country_names = ['usa','brazil','canada']
country_rank = pd.Series(np.random.randn(3), index=country_names)
import matplotlib.pyplot as plt

plt.rcdefaults()
fig, ax = plt.subplots(figsize=(10,15)) # set figure size
y_pos = np.arange(len(country_names))
error = np.zeros(len(country_names))


ax.barh(y_pos, country_rank, color='green', xerr=error, align='center', ecolor='black')
ax.set_yticks(y_pos)
ax.set_yticklabels(country_names)
ax.invert_yaxis()  # labels read top-to-bottom
ax.set_xlabel('Strategy Score')  # add comments on x, y labels.
ax.set_title('Global Large Cap Index Allocation Model')

ax.set_yticklabels(country_names, ha='left',  minor=False) #align y tick_labels to the left
ax.yaxis.tick_right() #move y tickers to the right
plt.tight_layout() #avoid text overlap

plt.show()

1 Ответ

0 голосов
/ 17 мая 2018

Вы можете создать список цветов для каждой страны.Для стран, которые вы не хотите отмечать, вы будете использовать цвет по умолчанию (например, «g»).Вы можете найти правильную страну для выделения, проиндексировав названия стран.Например:

#defalut color
color = [ 'g' for i in country_names]
#highlight usa:
color[ country_names.index("usa") ] = "b"
#highlight canada:
color[ country_names.index("canada") ] = "r"

ax.barh(y_pos, country_rank, color=color, xerr=error, align='center', ecolor='black')

Если вам нужно установить один и тот же цвет для некоторых стран в списке выбранных стран, и этот список не так уж велик .... (В списке только 196 странмир), вы можете сделать это в простой петле

for name in selected_coutries:
    color[ country_names.index(name) ] = "y"
...