Python 如何在Seaborn按年月订购X轴
我使用的是当前版本的 我的问题是,我想创建一个绘图,该绘图是由绘制在多个图形上的不同特征的每月聚合排序的 X轴的年-月创建Python 如何在Seaborn按年月订购X轴,python,pandas,datetime,matplotlib,seaborn,Python,Pandas,Datetime,Matplotlib,Seaborn,我使用的是当前版本的 我的问题是,我想创建一个绘图,该绘图是由绘制在多个图形上的不同特征的每月聚合排序的 X轴的年-月创建 INPUT: df['DateTime'] = df['Date'].astype(str) + ' ' + df['Time'].astype(str) df['DateTime'] = pd.to_datetime(df['DateTime'], format='%m/%d/%Y %H:%M:%S') print(df['DateTime'].iloc[:2]) OU
INPUT:
df['DateTime'] = df['Date'].astype(str) + ' ' + df['Time'].astype(str)
df['DateTime'] = pd.to_datetime(df['DateTime'], format='%m/%d/%Y %H:%M:%S')
print(df['DateTime'].iloc[:2])
OUTPUT:
0 2004-11-23 19:00:00
1 2004-11-23 20:00:00
Name: DateTime, dtype: datetime64[ns]
INPUT:
df['Date'] = pd.to_datetime(df['Date'].astype(str), format='%m/%d/%Y')
df['Year'] = df['DateTime'].map(lambda x: x.year)
print(df['Year'].iloc[:2])
OUTPUT:
0 2004
1 2004
Name: Year, dtype: int64
INPUT:
df['YearMonth'] = pd.to_datetime(df.DateTime).dt.to_period('m')
print(df['YearMonth'].iloc[:2])
OUTPUT:
0 2004-11
1 2004-11
Name: YearMonth, dtype: period[M]
目标具有相同的结果、格式
我的绘图
plt.figure(figsize=(30,60))
#fig, axes = plt.subplots(1, 1, figsize=(30, 60), dpi=100)
gasList = ['CO_GT', 'C6H6_GT', 'Nox_GT', 'NO2_GT']
for i, col in enumerate(gasList, start=1):
plt.subplot(len(showList), 1, i)
sns.pointplot(x='YearMonth', y=col, hue='Year', data=df)
plt.title(col, y=0.5, loc='right')
#axes.set_xticks(year_month_day)
plt.show()
理想绘图
plt.figure(figsize=(30,60))
#fig, axes = plt.subplots(1, 1, figsize=(30, 60), dpi=100)
gasList = ['CO_GT', 'C6H6_GT', 'Nox_GT', 'NO2_GT']
for i, col in enumerate(gasList, start=1):
plt.subplot(len(showList), 1, i)
sns.pointplot(x='YearMonth', y=col, hue='Year', data=df)
plt.title(col, y=0.5, loc='right')
#axes.set_xticks(year_month_day)
plt.show()
我正在努力实现与此相同的目标
试图解决问题
- 如果我只使用DateTime,那么它可以对日期进行排序,但这会使绘图变得人口稠密
- 我有创建YearMonth的相同数据格式
- 我自己创建了一个uniq值列表,但它也崩溃了。输出:正确的YearMonth x轴刻度,正确打印外部元素,但未打印数据点
DateTime CO_GT C6H6_GT
2004-11-01 2.7 12.4
2004-12-01 2.6 10.6
2004-10-01 3.0 13.8
2005-01-01 2.0 9.0
2005-02-01 2.2 8.0
2004-03-01 2.2 10.0
2004-09-01 2.2 12.0
2005-03-01 2.0 8.6
2004-04-01 2.1 10.2
2004-05-01 1.95 10.5
2004-06-01 1.85 10.4
2004-07-01 1.7 10.5
2005-04-01 1.3 4.5
2004-08-01 1.4 6.8
然后我阅读了它,将DateTime列转换为DateTime类型(最早
尽可能,即仅在阅读时):
第一步是创建“辅助”列:
为了生成图片,我运行了:
gasList = ['CO_GT', 'C6H6_GT']
plt.figure(figsize=(14, 8))
for i, col in enumerate(gasList, start=1):
plt.subplot(len(gasList), 1, i)
sns.pointplot(x='YearMonth', y=col, hue='Year', data=df.sort_values('DateTime'))
plt.title(col, y=0.5, loc='right')
plt.show()
结果是:
DateTime CO_GT C6H6_GT
2004-11-01 2.7 12.4
2004-12-01 2.6 10.6
2004-10-01 3.0 13.8
2005-01-01 2.0 9.0
2005-02-01 2.2 8.0
2004-03-01 2.2 10.0
2004-09-01 2.2 12.0
2005-03-01 2.0 8.6
2004-04-01 2.1 10.2
2004-05-01 1.95 10.5
2004-06-01 1.85 10.4
2004-07-01 1.7 10.5
2005-04-01 1.3 4.5
2004-08-01 1.4 6.8
df = pd.read_fwf('Input.csv', widths=[12, 7, 7], parse_dates=[0])
df['Year'] = df.DateTime.dt.year
df['YearMonth'] = df.DateTime.dt.to_period('m')
gasList = ['CO_GT', 'C6H6_GT']
plt.figure(figsize=(14, 8))
for i, col in enumerate(gasList, start=1):
plt.subplot(len(gasList), 1, i)
sns.pointplot(x='YearMonth', y=col, hue='Year', data=df.sort_values('DateTime'))
plt.title(col, y=0.5, loc='right')
plt.show()