Как построить два столбца панд данных в виде горизонтального столбца? - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь сравнить две колонки в моем фрейме данных и хочу построить их как горизонтальную полосу с использованием Seaborn.На графике ниже показан только один столбец («budget2019»).

actual plot with just one year 'budget2019' plotted

1) Как я могу построить второй столбец ('budget2018') рядом с ним, чтобы лучше видеть эволюцию между двумя столбцами'значения и сравнить визуально оба бара, для каждого "министерства"?

2) Как я могу поставить значение x в конце каждого столбца, чтобы можно было видеть (читать) значение x на каждом столбце, и не нужно опускать глаза вниз, ипопытаться приблизить значение?Потому что сейчас на реальном графике нельзя реально прочитать значение x прямо с бара.(довольно сложно получить точное значение, глядя на график)

3) После того, как я построю график для столбцов «бюджет2018» рядом со столбцами «бюджет2019», есть ли способ также поместить эволюцию впроцентов на участке?Чтобы визуально лучше читалось, какова эволюция в% между двумя столбцами?

Вот посмотрите на мой фрейм данных:

a part of my small dataframe

А вот код, который я сейчас использую для построения графика:

plt.figure(figsize=(15,8))

sns.set(style="darkgrid")

#ax = sns.barplot(x="budget2018", y="ministere", data=budget, label="Total")
sns.set_color_codes("pastel")
sns.barplot(x="budget2019", y="ministere", data=budget, label="Budget 2019")

sns.despine(left=True, bottom=True)

plt.tight_layout()
plt.show()

PS: Если это невозможно с Seaborn, решение с одним Matplotlib также будет в порядке.И что нужно, так это горизонтальные столбики, как на моем графике, в противном случае эти символы не читаются.

EDIT (после использования кода в комментарии ImportanceOfBeingErnest):

Вот график, который я на самом деле вижу, после того как @ImportanceOfBeingErnest прокомментировал.Это довольно близко к тому, что мне нужно.

plot after @ImportanceOfBeingErnest's comment (setting index)

1 Ответ

0 голосов
/ 19 декабря 2018

Чтобы использовать seaborn, вы должны использовать промежуточный фрейм данных, созданный с помощью melt, для создания фрейма данных "длинной формы".

df2 = pd.melt(budget, id_vars=['ministere'], value_vars=['budget2018','budget2019'], var_name='year')

, тогда построение обоих столбцов выполняется с использованием hue=параметр:

fig,ax = plt.subplots()
sns.set_color_codes("pastel")
sns.barplot(x="value", y="ministere", hue="year", data=df2, palette='pastel')

настроить ярлыки по запросу довольно легко (и вы найдете множество других примеров для SO):

for i,m in budget.iterrows():
    ax.annotate(s='{:.2f}%'.format(m.loc['evolution_percent']),
                xy=(m.loc[['budget2018','budget2019']].max(),i),
                xytext=(10,0),
                textcoords='offset pixels',
                ha='left',
                va='center'
               )

labels = ['{:s}\n(2019: {:.2f}€)'.format(d.ministere,d.budget2019) for _,d in budget.iterrows()]
ax.set_yticklabels(labels)

enter image description here

...