gpt4 book ai didi

python - 如何在 Seaborn 按 YearMonth 订购 X 轴

转载 作者:行者123 更新时间:2023-12-05 03:49:53 24 4
gpt4 key购买 nike

我用的是当前版本http://archive.ics.uci.edu/ml/datasets/Air+quality我的问题是我想创建一个图表,该图表按绘制在多个图表上的不同特征的月度聚合排序

X 轴的 YearMonth 创建

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]

目标 project有相同的结果,格式

我的计划

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()

enter image description here

理想的绘图

我正在尝试实现与此相同的 projects

enter image description here

试图解决问题

  • 如果我只使用 DateTime 而不是它可以对日期进行排序,但这会使情节变得密集
  • 我使用与创建 YearMonth 相同的数据格式
<class 'pandas.core.frame.DataFrame'>
Int64Index: 9357 entries, 0 to 9356
Data columns (total 17 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Date 9357 non-null datetime64[ns]
1 Time 9357 non-null object
2 CO_GT 9357 non-null float64
3 PT08_S1_CO 9357 non-null float64
4 C6H6_GT 9357 non-null float64
5 PT08_S2_NMHC 9357 non-null float64
6 Nox_GT 9357 non-null float64
7 PT08_S3_Nox 9357 non-null float64
8 NO2_GT 9357 non-null float64
9 PT08_S4_NO2 9357 non-null float64
10 PT08_S5_O3 9357 non-null float64
11 T 9357 non-null float64
12 RH 9357 non-null float64
13 AH 9357 non-null float64
14 DateTime 9357 non-null datetime64[ns]
15 Year 9357 non-null int64
16 YearMonth 9357 non-null period[M]
dtypes: datetime64[ns](2), float64(12), int64(1), object(1), period[M](1)
memory usage: 1.3+ MB
  • 他的数据集的时间格式是 Y m d 我的是 m d Y 但是我已经改回和他一样了
  • 我尝试过使用 seaborn 的顺序参数。它会加载很长时间,但不会返回任何内容。
col_one_list = df['YearMonth'].tolist()
plt.figure(figsize=(30,60))

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, order = col_one_list )
plt.title(col, y=0.5, loc='right')

plt.show()
  • 我自己创建了一个包含 uniq 值的列表,但它也崩溃了。输出:正确的 YearMonth-s x 轴刻度,正确的绘图外部元素,但没有绘制数据点。
plt.figure(figsize=(30,60))

col_two_list = ['2004-03','2004-04', '2004-05', '2004-06', '2004-07', '2004-08', '2004-09', '2004-10', '2004-11','2004-12', '2005-01','2005-02','2005-03', '2005-04']

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, order = col_two_list )
plt.title(col, y=0.5, loc='right')

plt.show()

最佳答案

简答

当您生成点图时,传递排序 DataFrame(通过YearMonth) 并且打印输出应该如您所愿。

如果没有上述排序,图片就是您提供的(错误)。

长答案

我准备了一个测试输入文件,只有 2 列,如下所示:

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 类型(早尽可能,即只是在阅读):

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()

结果是:

enter image description here

关于python - 如何在 Seaborn 按 YearMonth 订购 X 轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63706303/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com