#pandas #plot
#pandas #вывод
Вопрос:
У меня есть два фрейма данных со своими собственными значениями. Когда я хотел бы, чтобы они отображались на одном графике, в результате я вижу данные только из одного из фреймов данных.
gdpgraph['sum'] = gdpgraph['sum'].fillna(0).astype(np.int64)
gdpgraph.info()
Индекс: 18 записей, с 2000 по 2017 год
Столбцы данных (всего 1 столбец):
сумма 18 ненулевых значений int64
dtypes: int64(1)
объем используемой памяти: более 928.0 байт
graphsoccer = soccer.groupby(['Year'])['Amount'].agg(['sum'])
graphsoccer.info()
Индекс: 18 записей, с 2000 по 2017 год
Столбцы данных (всего 1 столбец):
сумма 18 ненулевых значений int64
dtypes: int64(1)
объем используемой памяти: 288,0 байт
fig = plt.figure()
ax = plt.subplot(111)
gdpgraph['sum'].plot(ax=ax)
graphsoccer['sum'].plot(ax=ax)
Результатом является график, содержащий только информацию graphsoccer, другой фрейм данных является плоским.
Ваша помощь очень приветствуется.
Комментарии:
1. похоже, это должно сработать … что вы подразумеваете под flat? Вы можете добавить график к вопросу? Может быть, проверить базовые данные? Что
gdpgraph['sum'].describe()
например?2. [ссылка] cloudgeek.nl/plot2.png
3. Оба фрейма данных содержат на своих осях годы, а другие оси содержат значения. Нет значений NaN или пустых строк.
4. Может быть, проблема с масштабированием? что такое
graphsoccer['sum'].describe()
?5. количество 1.800000e 01 означает 2.212522e 09 std 9.555994e 08 мин. 1.071060e 09 25% 1.580572e 09 50% 2.070600e 09 75% 2.442665e 09 макс 4.706270e 09 Имя: сумма, dtype: float64
Ответ №1:
Альтернативное решение:
fig, ax = plt.subplots(1,1)
gdpgraph['sum'].plot(ax=ax)
graphsoccer['sum'].plot(ax=ax, secondary_y=True)
plt.show()
Ответ №2:
Это проблема масштабирования ваших данных, одно DataFrame
значение находится в 100 метрах, а другое — в 100 метрах.
Вы могли бы создать вторичную ось для отображения одного из ваших рядов:
fig = plt.figure()
ax = plt.subplot(111)
ax2 = ax.twinx()
gdpgraph['sum'].plot(ax=ax)
graphsoccer['sum'].plot(ax=ax2)
Или
gdpgraph['sum'].plot(ax=ax)
graphsoccer['sum'].plot(ax=ax, secondary_y=True)
Комментарии:
1. Спасибо за вашу потрясающую помощь!
2. @Spanhaak нет проблем
3. Есть ли также способ показать значения по осям x? в обоих df есть столбец Year. Кажется, я не могу заставить это работать.
4. Исправлено ли добавление
ax.set_xticklabels(graphsoccer.index)
?5. Да, это так, но у меня есть идея, что количество тиков должно быть больше, чтобы лучше соответствовать данным. теперь я вижу 2001-2008 годы, в то время как данные имеют 2000-2017 годы, есть ли способ продлить сроки?