matplotlib 如何从Pandas图中得到三个图变成一个图

2wnc66cl  于 2023-02-19  发布在  其他
关注(0)|答案(1)|浏览(154)

我有大量的CSV文件,其中使用的时间序列跨越3年,看起来像这样:

Date                   Company1       Company2
2020-01-01 00:00:00        100            200
2020-01-01 01:00:00        110            180
2020-01-01 02:00:00        90             210
2020-01-01 03:00:00        100            200
      ....                 ...            ...
2020-12-31 21:00:00        100            200
2020-12-31 22:00:00        80             230
2020-12-31 23:00:00        120            220

除了我有10家公司。不管怎样,我设法每年一个月画3块地,看起来像这样

newMatrix.plot(x='Date', y='Company4', xlim=('2020-01-01 00:00:00', '2020-01-31 23:00:00'))
newMatrix.plot(x='Date', y='Company4', xlim=('2021-01-01 00:00:00', '2021-01-31 23:00:00'))
newMatrix.plot(x='Date', y='Company4', xlim=('2022-01-01 00:00:00', '2022-01-31 23:00:00'))

现在的问题是,我不知道如何制作一个图形,以便更好地看到不同年份(例如每年1月)的趋势差异,最好的结果是将日/月放在x轴上,每条线代表每年。
我一直在尝试把matplotlib和Pandas图结合起来,但是到目前为止我要么没有得到图,要么得到三个数字,我该怎么解决这个问题呢?

a7qyws3x

a7qyws3x1#

我认为你需要这样做(记住我没有完整的df):

import pandas as pd
import matplotlib.pyplot as plt

# create DataFrame
data = {'Date': ['2020-01-01 00:00:00', '2020-01-01 01:00:00', '2020-01-01 02:00:00', '2020-01-01 03:00:00', '2020-12-31 21:00:00', '2020-12-31 22:00:00', '2020-12-31 23:00:00'],
        'Company1': [100, 110, 90, 100, 100, 80, 120],
        'Company2': [200, 180, 210, 200, 200, 230, 220]}
df = pd.DataFrame(data)
df['Date'] = pd.to_datetime(df['Date'])
df.set_index('Date', inplace=True)
fig, axes = plt.subplots(nrows=2, ncols=5, figsize=(15, 6), sharey=True)

for i, company in enumerate(df.columns):
    # create mask for January for each year
    mask_2020 = (df.index >= '2020-01-01') & (df.index <= '2020-01-31')
    mask_2021 = (df.index >= '2021-01-01') & (df.index <= '2021-01-31')
    mask_2022 = (df.index >= '2022-01-01') & (df.index <= '2022-01-31')

    axes[i//5, i%5].plot(df.loc[mask_2020, company], label='2020')
    axes[i//5, i%5].plot(df.loc[mask_2021, company], label='2021')
    axes[i//5, i%5].plot(df.loc[mask_2022, company], label='2022')
    axes[i//5, i%5].set_title(company)
    axes[i//5, i%5].legend()

fig.text(0.04, 0.5, 'Value', va='center', rotation='vertical')
fig.text(0.5, 0.04, 'Date', ha='center')
fig.suptitle('Company trends for January of each year')
plt.subplots_adjust(wspace=0.3, hspace=0.5)

plt.show()

其给出:

相关问题