Как сделать так, чтобы x_labels отображались для сюжетов, которые находятся друг на друге? - PullRequest
0 голосов
/ 25 апреля 2020

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

income = 5000
immediate_obligations = -1000
true_expenses = -2000
total = income - immediate_obligations - true_expenses

fig,ax = plt.subplots()
ax.bar(x=[1],height=[income],color = 'green',tick_label="Income")
ax.bar(x=[2,3],height=[immediate_obligations,true_expenses], color = 'red', tick_label=["Immediate Obligations","true_expenses"])
ax.bar(x=[4],height=[total], color = 'blue')

fig.suptitle('Spending Current Month')

Причина, по которой я пошел по трем осям, заключалась в том, чтобы иметь возможность окрашивать доход в зеленый цвет, расходы в красный и разницу в синий. Графики отображаются хорошо, потому что они не пересекаются. Однако метка tick_labels отображается только для графика, созданного последним. Это имеет смысл, но как мне применить метки ко всему графику?

enter image description here

1 Ответ

1 голос
/ 25 апреля 2020

Аргумент color не обязательно должен быть одного цвета . Вы можете передать массив с цветом каждой полосы. Поэтому ваш вывод может быть достигнут, используя только один вызов bar():

income = 5000
immediate_obligations = -1000
true_expenses = -2000
total = income - immediate_obligations - true_expenses

bars = [income, immediate_obligations, true_expenses, total]
colors = ['g','r','r','b']
labels = ['Income','Immediate obligations','True expenses','Total']

fig,ax = plt.subplots()
ax.bar(x=range(len(bars)), height=bars, color=colors, tick_label=labels)
fig.suptitle('Spending Current Month')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...