Как построить линейку и линию на одном графике с отдельными осями? - PullRequest
1 голос
/ 05 марта 2020

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

d = {'Flag': [0.2, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0.5],
     'Year': [1956, 1994, 1994, 2000, 2000, 2000, 2004, 2004, 2004, 2004, 2005, 2005, 2005, 2005, 2019]}
df = pd.DataFrame(data=d)

bin_grp = df.groupby(df.Year)
grp = bin_grp['Flag'].agg(['mean', 'count'])

plt.figure()
ax1 = grp['count'].plot(color='green', kind='bar')
ax2 = ax1.twinx()
grp['mean'].plot(ax=ax2)
plt.show()

При работе с немного другими данными в этой же ситуации мой интуитивно понятно, что проблема возникает из-за того, что гистограмма рассматривает ось х как нечислительную c, тогда как линейная диаграмма обрабатывает ее как цифру c, тогда «пропуски» в значениях оси х вызывают проблемы.

1 Ответ

2 голосов
/ 05 марта 2020

Как вы сказали, это должно быть связано с осью X. В старой проблеме github упоминается аналогичная проблема, когда установка sharex=False решает проблему. Я не смог найти более точную информацию о том, почему возникает эта проблема.

Однако, чтобы получить правильный график в этом случае, вы можете использовать функцию matplotlib.axes.Axes.plot вместо pandas.DataFrame.plot следующим образом.

fig, ax = plt.subplots()
ax2 = ax.twinx()
ax.bar(grp.index, grp['count'], color='green')
ax2.plot(grp.index, grp['mean'])
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...