Как графически сравнить два кадра данных панд, где индекс - дата и время - PullRequest
0 голосов
/ 11 декабря 2018

Я измеряю данные о температуре и получаю .csv следующим образом:

Date/Time,to [°C]
06.12.2018 11:56:07,-26.2
06.12.2018 11:56:09,-26.2
06.12.2018 11:56:11,-26.2
06.12.2018 11:56:13,-26.2
06.12.2018 11:56:15,-26.2

Я хотел бы нанести на график значения двух одинаковых видов измерений, выполненных в двух разных временных интервалах.Так что мне нужно нормализовать дату или как сделать их сопоставимыми в линейном графике?Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Создайте независимую ось, используя ax.twiny

Вот способ сделать это.Допустим, у вас есть следующие фреймы данных:

df1 = pd.DataFrame({'date1':['06.12.2018 11:56:07', '06.12.2018 11:56:09', '06.12.2018 11:56:11', '06.12.2018 11:56:13' ],
               'temp': [20.7,13,7,30]})
df2 = pd.DataFrame({'date2':['06.12.2018 21:56:07', '06.12.2018 21:56:09', '06.12.2018 21:56:11', '06.12.2018 21:56:13' ],
               'temp': [3,-2,-5,3]})
df1.date1 = pd.to_datetime(df1.date1)
df2.date2 = pd.to_datetime(df2.date2)

Вы можете создать дополнительную ось X, используя ax.twiny(), которая создаст двойную ось, разделяющую яксис.Таким образом, вы можете иметь обе последовательности на одном графике, и вы не потеряете информацию date:

fig = plt.figure(figsize=(15,8))
ax = fig.add_subplot(111)
df1.plot(x='date1', y = 'temp', ax=ax, label='df1', c='red')
ax2 = ax.twiny()
df2.plot(x='date2', y = 'temp', ax=ax2, label = 'df2', c='blue')

enter image description here

0 голосов
/ 11 декабря 2018

Вы имеете в виду, что вы хотите игнорировать временные метки при построении графиков для сравнения значений?Вот как можно построить две серии вместе без меток времени.Я добавил второй список со случайными температурами.

import matplotlib.pyplot as plt
import numpy as np
other_list = [-23,-29,-10 ,0,3]
t = np.arange(len(df))
plt.figure(figsize=(10,7))
plt.plot( t,df['to [°C]'].values, 'r--s',t, other_list, 'b--s')
plt.legend(('FirstDf', 'SecDf'),
           loc='center right',title = 'visualization')
plt.show()
...