将每个城市在每个月份平均PM2.5绘制成折线图
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_excel('./PM2.5.xlsx')
display(df.head(10))
df.shape
|
城市 |
年份 |
月份 |
日期 |
小时 |
季节 |
PM2.5 |
露点 |
湿度 |
压强 |
温度 |
风向 |
累计风速 |
降水量 |
累计降水量 |
0 |
北京 |
2010 |
1 |
1 |
23 |
冬 |
129 |
-17.0 |
41.0 |
1020.0 |
-5.0 |
cv |
0.89 |
0.0 |
0.0 |
1 |
北京 |
2010 |
1 |
2 |
0 |
冬 |
148 |
-16.0 |
38.0 |
1020.0 |
-4.0 |
SE |
1.79 |
0.0 |
0.0 |
2 |
北京 |
2010 |
1 |
2 |
1 |
冬 |
159 |
-15.0 |
42.0 |
1020.0 |
-4.0 |
SE |
2.68 |
0.0 |
0.0 |
3 |
北京 |
2010 |
1 |
2 |
2 |
冬 |
181 |
-11.0 |
63.5 |
1021.0 |
-5.0 |
SE |
3.57 |
0.0 |
0.0 |
4 |
北京 |
2010 |
1 |
2 |
3 |
冬 |
138 |
-7.0 |
85.0 |
1022.0 |
-5.0 |
SE |
5.36 |
0.0 |
0.0 |
5 |
北京 |
2010 |
1 |
2 |
4 |
冬 |
109 |
-7.0 |
85.0 |
1022.0 |
-5.0 |
SE |
6.25 |
0.0 |
0.0 |
6 |
北京 |
2010 |
1 |
2 |
5 |
冬 |
105 |
-7.0 |
92.0 |
1022.0 |
-6.0 |
SE |
7.14 |
0.0 |
0.0 |
7 |
北京 |
2010 |
1 |
2 |
6 |
冬 |
124 |
-7.0 |
92.0 |
1023.0 |
-6.0 |
SE |
8.93 |
0.0 |
0.0 |
8 |
北京 |
2010 |
1 |
2 |
7 |
冬 |
120 |
-7.0 |
85.0 |
1024.0 |
-5.0 |
SE |
10.72 |
0.0 |
0.0 |
9 |
北京 |
2010 |
1 |
2 |
8 |
冬 |
132 |
-8.0 |
85.0 |
1024.0 |
-6.0 |
SE |
12.51 |
0.0 |
0.0 |
df2 = df.groupby(by = ['城市','月份'])[['PM2.5']].mean().round(2)
df2 = df2.unstack(level = -1)
df2.columns = df2.columns.droplevel(level=0)
df2
月份 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
城市 |
|
|
|
|
|
|
|
|
|
|
|
|
上海 |
80.77 |
59.58 |
59.38 |
55.32 |
52.23 |
41.48 |
31.03 |
26.61 |
32.69 |
42.28 |
64.02 |
86.54 |
北京 |
113.80 |
120.93 |
96.34 |
83.40 |
76.67 |
89.56 |
88.48 |
73.75 |
78.75 |
112.72 |
108.47 |
107.49 |
广州 |
80.03 |
58.73 |
48.75 |
67.04 |
46.95 |
35.34 |
26.14 |
38.63 |
40.47 |
60.10 |
53.13 |
61.99 |
成都 |
161.32 |
110.04 |
96.71 |
67.99 |
68.56 |
53.81 |
54.05 |
61.26 |
60.25 |
84.76 |
82.13 |
116.08 |
沈阳 |
111.04 |
103.11 |
77.39 |
65.51 |
53.89 |
47.88 |
42.25 |
43.94 |
46.79 |
89.03 |
101.67 |
112.61 |
df2.loc["上海"]
df2.index
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['font.size'] = 18
months = df2.columns
plt.figure(figsize=(12, 6))
for city in df2.index:
plt.plot(months, df2.loc[city], marker='o', label=city)
plt.title('PM2.5 Variation by City and Month')
plt.xlabel('Month')
plt.ylabel('PM2.5')
plt.xticks(months)
plt.grid(True)
plt.legend()
plt.show()
将每个城市在每个季节最低温度绘制柱状图
df3 = df.groupby(by = ['城市','季节'])[['温度']].min().round(2)
df3 = df3.unstack(level=-1)
df3.columns = df3.columns.droplevel(level=0)
df3 = df3[list('春夏秋冬')]
df3 = df3.loc[['北京','上海','广州','成都','沈阳']]
df3
季节 |
春 |
夏 |
秋 |
冬 |
城市 |
|
|
|
|
北京 |
-9.0 |
13.0 |
-12.0 |
-19.0 |
上海 |
-1.0 |
17.0 |
-2.0 |
-4.0 |
广州 |
7.6 |
20.5 |
6.4 |
1.7 |
成都 |
5.0 |
18.0 |
5.0 |
-2.0 |
沈阳 |
-14.0 |
10.0 |
-18.0 |
-25.0 |
fig = plt.figure(figsize=(12,12))
ax = fig.add_subplot(1,1,1)
df3.plot.bar(ax = ax)
plt.grid(color = 'gray',ls = '--')
plt.ylabel('温度')
plt.rcParams['axes.unicode_minus'] = False
各个城市最大风速随时间变化趋势
import numpy as np
fig,axes = plt.subplots(2,2,figsize = (16,12))
df4 = df.groupby(by = ['城市','年份'])[['累计风速']].max().round(2)
df4 = df4.unstack(level = 0)
df4.columns = df4.columns.droplevel(0)
df4 = df4[['北京','上海','广州','沈阳','成都']]
df4.plot(ax = axes[0,0])
axes[0, 0].set_ylabel("风速")
df5= df.groupby(by = ['城市','月份'])[['累计风速']].max().round(2)
df5 = df5.unstack(level = 0)
df5.columns = df5.columns.droplevel(0)
df5 = df5[['北京','上海','广州','沈阳','成都']]
ax = df5.plot(ax = axes[1,0])
months = ['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月']
ax.set_xticks(np.arange(1,13))
_ = ax.set_xticklabels(months,rotation = 60)
df6 = df.groupby(by = ['城市','季节'])[['累计风速']].max().round(2)
df6= df6.unstack(level = 0)
df6 = df6.loc[list('春夏秋冬')]
df6.columns = df6.columns.droplevel(0)
df6 = df6[['北京','上海','广州','沈阳','成都']]
df6.plot(ax = axes[0,1])
df7 = df.groupby(by = ['城市','小时'])[['累计风速']].max().round(2)
df7= df7.unstack(level = 0)
df7.columns = df7.columns.droplevel(0)
df7 = df7[['北京','上海','广州','沈阳','成都']]
ax = df7.plot(ax = axes[1,1])
_ = ax.set_xticks(np.arange(0,24))
plt.savefig('./各个城市最大风速随时间变化趋势.png')