Наложение графиков из нескольких pandas фреймов данных на месяц и день - PullRequest
0 голосов
/ 18 марта 2020

У меня возникла проблема, когда у меня есть несколько pandas фреймов данных, где индексом является дата_рандж в формате %m-%d-%y, и каждый фрейм данных представляет один год данных, каждый фрейм данных - отдельный год. Я хотел бы наложить данные на график только в зависимости от месяца и дня, чтобы каждый график располагался поверх другого. Однако, когда я пытаюсь построить их, результирующий график помещает каждую кривую рядом, потому что они находятся в разные годы. Пример показан ниже.

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

import matplotlib
import matplotlib.dates as dates 
from matplotlib import pyplot as plt 

data1 = {'Date': ['2009-01-01', '2009-01-02', '2009-01-03', ...], 'Data': [4.0, 3.1, 1.2, ...]}
df1 = pd.DataFrame(data1)
df1['Date'] = pd.to_datetime(df['Date'])
df1 = df1.drop(['Date'], axis=1)

data2 = {'Date': ['20010-01-01', '20010-01-02', '20010-01-03', ...], 'Data': [4.0, 3.1, 1.2, ...]}
df2 = pd.DataFrame(data2)
df2['Date'] = pd.to_datetime(df2['Date'])
df2 = df2.drop(['Date'], axis=1)

fig, td_plot = plt.subplots()
td_plot.xaxis.set_major_formatter(dates.DateFormatter('%m-%d'))
td_plot.plot(df1.index, df1['Data'])
td_plot.plot(df2.index, df2['Data'])
plt.show()

enter image description here

1 Ответ

0 голосов
/ 24 марта 2020

Если вас не интересует информация о году, вы можете просто «игнорировать» ее, используя .strftime(). Например:

import pandas as pd
import matplotlib
import matplotlib.dates as dates 
from matplotlib import pyplot as plt 

data1 = {'Date': ['2009-01-01', '2009-05-02', '2009-09-03'], 'Data': [4.0, 3.1, 1.2]}
df1 = pd.DataFrame(data1)
df1['Date'] = pd.to_datetime(df1['Date'])
df1.index = df1['Date']
df1 = df1.drop(['Date'], axis=1)

data2 = {'Date': ['2010-01-01', '2010-05-02', '2010-09-03'], 'Data': [8.0, 2.1, 3.2]}
df2 = pd.DataFrame(data2)
df2['Date'] = pd.to_datetime(df2['Date'])
df2.index = df2['Date']
df2 = df2.drop(['Date'], axis=1)

# Plot using day, month and year
fig, ax = plt.subplots()
ax.plot(df1.index, df1['Data'], label='Year x')
ax.plot(df2.index, df2['Data'], label='Year y')
plt.legend()
fig.set_size_inches(10,8)
plt.show()

Plot before dropping year info

График с использованием .strftime('%d-%m') для игнорирования информации о году:

fig, ax = plt.subplots()
ax.plot(df1.index.strftime('%d-%m'), df1['Data'], label='Year x')
ax.plot(df2.index.strftime('%d-%m'), df2['Data'], label='Year y')
plt.legend()
fig.set_size_inches(10,8)
plt.show()

enter image description here

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