Не удалось построить несколько горизонтальных столбцов рядом - PullRequest
0 голосов
/ 05 февраля 2019

Я хотел бы построить несколько горизонтальных гистограмм, имеющих одну и ту же ось Y.Чтобы уточнить, у меня есть 4 кадра данных, каждый из которых представляет гистограмму.Я хочу использовать эти кадры для построения двух горизонтальных гистограмм слева и еще двух справа.Прямо сейчас я могу отображать только одну горизонтальную гистограмму слева и справа.Ниже приведены мои желаемые выходные данные, код и ошибка

Desired Output

data1 = {
'age': ['20-24 Years', '25-29 Years', '30-34 Years', '35-39 Years', '40-44 Years', '45-49 Years'],
'single_value': [97, 75, 35, 19, 15, 13]
}

data2 = {
'age': ['20-24 Years', '25-29 Years', '30-34 Years', '35-39 Years', '40-44 Years', '45-49 Years'],
'single_value': [98, 79, 38, 16, 15, 13]
}

data3 = {
'age': ['20-24 Years', '25-29 Years', '30-34 Years', '35-39 Years', '40-44 Years', '45-49 Years'],
'single_value': [89, 52, 22, 16, 12, 13]
}

data4 = {
'age': ['20-24 Years', '25-29 Years', '30-34 Years', '35-39 Years', '40-44 Years', '45-49 Years'],
'single_value': [95, 64, 27, 18, 15, 13]
}

df_male_1 = pd.DataFrame(data1)
df_male_2 = pd.DataFrame(data2)
df_female_1 = pd.DataFrame(data3)
df_female_2 = pd.DataFrame(data4)

fig, axes = plt.subplots(ncols=2, sharey=True, figsize=(12,12))

axes[0].barh(df_male_1['age'], df_male_1['single_value'], align='center', 
color='red', zorder=10)

axes[0].barh(df_male_2['age'], df_male_2['single_value'], align='center', 
color='blue', zorder=10)

axes[0].set(title='Age Group (Male)')

axes[1].barh(df_female_1['age'], df_female_1['single_value'], 
align='center', color='pink', zorder=10)

axes[1].barh(df_female_2['age'], df_female_2['single_value'], 
align='center', color='purple', zorder=10)

axes[1].set(title='Age Group (Female)')

axes[0].invert_xaxis()
axes[0].set(yticks=df_male_1['age'])
axes[0].yaxis.tick_right()

for ax in axes.flat:
    ax.margins(0.09)
    ax.grid(True)

fig.tight_layout()
fig.subplots_adjust(wspace=0.09)
plt.show()    

Ошибка вывода Error output

1 Ответ

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

Проблема в том, что в настоящее время ваши бары перекрывают друг друга, потому что они center выровнены по умолчанию.Чтобы получить желаемую фигуру, вы должны выровнять их по краям.Чтобы они были рядом друг с другом, вы должны использовать отрицательную и положительную высоты (горизонтальная ширина столбцов).Вы можете выбрать значение height в соответствии с потребностями

Ниже приведен измененный код (отображается только соответствующая часть)

fig, axes = plt.subplots(ncols=2, sharey=True, figsize=(12,12))

axes[0].barh(df_male_1['age'], df_male_1['single_value'], align='edge', height=0.3, 
             color='red', zorder=10)

axes[0].barh(df_male_2['age'], df_male_2['single_value'], align='edge', height=-0.3,
             color='blue', zorder=10)

axes[0].set(title='Age Group (Male)')

axes[1].barh(df_female_1['age'], df_female_1['single_value'], align='edge',height=0.3, 
             color='pink', zorder=10)

axes[1].barh(df_female_2['age'], df_female_2['single_value'], align='edge', height=-0.3, 
             color='purple', zorder=10)

enter image description here

...