Построение графиков данных панд с помощью PeriodIndex - PullRequest
0 голосов
/ 29 апреля 2019

У меня проблемы с построением pandas кадра данных с PeriodIndex.

В моих данных есть пробелы, и я хочу добиться следующего:

  • Пробелыдолжны оставаться пробелы без интерполяции;
  • Поскольку каждое значение действует в течение всего периода времени, значение должно отображаться в виде горизонтальной линии в течение всего периода.
  • Полезно иметь:нет вертикальной линии на границах периода.

Пример

yearly = pd.DataFrame({'avSpeed': [50, 40, 20, 16]}, index=pd.PeriodIndex(['2014', '2015', '2018', '2019'], freq='A'))

      avSpeed
2014       50
2015       40
2018       20
2019       16

Пока мой код

  • Сделать кадр данных пустым, заполняя пробелыс NaN (путем повторной выборки с неизменной частотой):

    yearly2 = yearly.resample('A').mean()
    
          avSpeed
    2014     50.0
    2015     40.0
    2016      NaN
    2017      NaN
    2018     20.0
    2019     16.0
    
  • Постройте это с помощью steps-post:

    plt.figure()
    yearly2['avSpeed'].plot(color='red', drawstyle='steps-post')
    

    enter image description here

Чего еще не хватает:

  • Основная проблема: значение для 2019 отображается только в начале года.
  • Также:присутствуют вертикальные соединительные линии (нежелательные).

РЕДАКТИРОВАТЬ: Решение

Нет необходимости увеличивать данные или даже заполнять их пробелы NaN!Я могу построить данные как hlines примерно так:

ax=plt.subplot()
ax.hlines(yearly['avSpeed'],  yearly.index.start_time, (yearly.index+1).start_time, 'r') #or: yearly.index.end_time
ax.legend()
plt.show()

enter image description here

Большое спасибо @piRSquared за то, что указал мне правильное направление.

Ответы [ 2 ]

0 голосов
/ 29 апреля 2019

Вы можете использовать hlines с атрибутами pandas.PeriodIndex start_time и end_time

ax = plt.subplot()
ax.hlines(yearly, yearly.index.start_time, yearly.index.end_time, 'r', label='avSpeed')
ax.legend()

enter image description here

0 голосов
/ 29 апреля 2019

Поскольку проблемы возникают только с последним периодом, просто добавление нового периода со смещением в 1 год, заполненное nan, решит вашу проблему:

yearly2.loc[yearly2.index[-1] + pd.offsets.YearEnd(1), :] = np.nan

Указание pd.offset с помощью YearEnd сохранит вашу частоту PeriodIndex, которая равна A-DEC при повторной дискретизации / создании PeriodIndex с freq='A'. Для других периодических частот, конечно, следует использовать другие смещения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...