基于月和日的多个熊猫数据框的叠加图

问题描述 投票:0回答:1

我有一个问题,我有多个熊猫数据帧,其中索引是格式为%m-%d-%y的date_range,每个数据帧代表一年的数据,每个数据帧分别代表一年。我只想将绘图中的数据作为月份和日期的函数进行叠加,以使每个绘图都位于另一个上方。但是,当我尝试绘制它们时,由于它们处于不同的年份,因此生成的图将每条曲线并排放置。下面显示一个示例。

在此问题中张贴的伪代码下面是实际代码输出的示例。我试图使蓝色图位于红色图的顶部,但是,代码始终要考虑年份并将蓝色图置于红色图的右侧,而不是同一个月的顶部年数据点。任何有关如何解决此问题的建议将不胜感激。

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

python-3.x pandas dataframe
1个回答
0
投票

如果您对年份信息不感兴趣,则可以使用.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

© www.soinside.com 2019 - 2024. All rights reserved.