如何基于Pandas Series按人口绘制污染物浓度CDF累积分布图?
没问题!要绘制基于人口的污染物浓度累积分布函数(CDF),核心是按污染物浓度排序后,计算人口的累积占比——毕竟你要的是「基于人口」的分布,不是普通的样本数量分布。下面是完整的实现步骤和代码,结合你已有的代码片段补全:
步骤1:数据预处理与排序
先完成数据加载、清洗,并按污染物浓度升序排序(CDF需要从低浓度到高浓度累积):
import pandas as pd import matplotlib.pyplot as plt # 加载数据并清洗(补全你的代码片段) df = pd.read_csv("./data/test.csv") df = df[df.columns[1:]] # 移除第一列无关索引 df = df.sort_values(by=['pm25'], ascending=True) # 按污染物浓度升序排序,若你的列名是conc则替换为conc
步骤2:计算基于人口的累积比例
这里我们需要用人口数据来计算累积占比,这是「基于人口的CDF」和普通CDF的核心区别:
# 计算总人口 total_pop = df['pop'].sum() # 计算累积人口数 df['cumulative_pop'] = df['pop'].cumsum() # 计算累积人口占比(即CDF的y轴值) df['cdf'] = df['cumulative_pop'] / total_pop
此时你需要的两个核心Series就是:df['pm25'](污染物浓度)和df['cdf'](基于人口的累积比例)。
步骤3:绘制CDF图
用matplotlib绘制直观的CDF曲线:
plt.figure(figsize=(10, 6)) # 绘制CDF曲线,可调整样式适配你的需求 plt.plot(df['pm25'], df['cdf'], marker='.', linestyle='-', color='#1f77b4', alpha=0.8) # 添加图表标注 plt.xlabel('污染物浓度 (PM2.5)') plt.ylabel('累积人口占比') plt.title('基于人口的污染物浓度累积分布') plt.grid(True, alpha=0.3) plt.show()
额外小提示
- 如果你的污染物浓度列名是
conc,记得把代码里的pm25全部替换为conc; - 若要对比多组数据(比如不同区域的CDF),可以重复上述步骤,在同一张图上绘制多条曲线;
- 追求更美观的可视化效果时,可改用
seaborn.lineplot替代原生matplotlib绘图。
内容的提问来源于stack exchange,提问作者Han Zhengzu
相关产品推荐
相关产品推荐

