提问人:rwp_utk 提问时间:10/26/2023 更新时间:10/26/2023 访问量:51
我有一个只有夏季月份的日期时间数据帧。如何绘制以使其连续而不是按年份分开?
I have a datetime dataframe that only has the summer months. How do I plot so that it is continuous instead of being separated by year?
问:
正如我在标题中提到的,我有一个日期时间数据框,我已经编辑为仅包括夏季月份。当我去绘制它时,这就是它的样子。我该如何修复它,以便年份之间没有差距?当前数据图
除了从日期时间转换它之外,我不确定从哪里开始,但我真的不想这样做。
答:
1赞
Corralien
10/26/2023
#1
没有任何其他信息很难帮助你。
假设您有以下数据帧:
>>> df
Datetime temp
0 2021-06-21 76.66
1 2021-06-22 81.79
2 2021-06-23 68.95
3 2021-06-24 84.59
4 2021-06-25 65.41
.. ... ...
265 2023-09-14 82.87
266 2023-09-15 70.50
267 2023-09-16 76.81
268 2023-09-17 75.20
269 2023-09-18 73.11
[270 rows x 2 columns]
>>> df.groupby(df['Datetime'].dt.year)['Datetime'].agg(['min', 'max'])
min max
Datetime
2021 2021-06-21 2021-09-18
2022 2022-06-21 2022-09-18
2023 2023-06-21 2023-09-18
如果你想要如下图所示的东西,你可以这样做:
xticks = df.loc[df['Datetime'].dt.day.eq(1), 'Datetime'].dt.strftime('%Y-%m')
vlines = df.groupby(df['Datetime'].dt.year)['Datetime'].idxmax()[:-1]
ax = df.plot(y='temp', rot=45)
ax.set_xticks(xticks.index, xticks)
ax.vlines(vlines, ymin=df['temp'].min(), ymax=df['temp'].max(), color='red', ls='dashed')
plt.tight_layout()
plt.show()
输出:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
period0 = pd.Series(pd.date_range('2021-06-21', periods=90, freq='D'))
period1 = pd.Series(pd.date_range('2022-06-21', periods=90, freq='D'))
period2 = pd.Series(pd.date_range('2023-06-21', periods=90, freq='D'))
df = pd.concat([period0, period1, period2], axis=0, ignore_index=True).to_frame('Datetime')
df['temp'] = np.round(65 + np.random.random(90*3) * 20, 2)
评论
df['date_col'] = pd.to_datetime(df['date_col'])
df['Year'] = df['date_col'].dt.year
df['DoY'] = df['date_col'].dt.day_of_year
import seaborn as sns
sns.lineplot(data=df, x='DoY', y='value_col', hue='Year')