Pandas выводит несколько фреймов данных, один фрейм данных создает плоскую линию

#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 годы, есть ли способ продлить сроки?