查看原文
其他

Python散点图矩阵示例--以空气质量数据为例

武辛 地学分析与算法 2022-05-17

散点图矩阵近来在数据分析和可视化中得到了很好的应用。它同时包含了直方图和散点图,位于对角线位置的直方图表示每一个变量的分布,对角线上下的散点图展示了变量两两之间的关系。在R、python和MATLAB中都提供了相应的包或函数进行散点图矩阵的绘制。


本文以之前爬取的空气质量数据为例,使用python绘制散点图矩阵,分析空气质量数据指标间的关系。

01使用seaborn.pairplot初步实现

用法:

df = read_data("data/AIR_beijing.csv") # 读取数据

tmp_ = df[['AQI', 'PM25', 'PM10', 'SO2', "Month"]] # 提取数据

sns.pairplot(tmp_)


就是这么简单的一句代码,就能展示变量两两之间的关系,对角线上是每个变量的直方图,可以看出每个变量值的分布;非对角线是两个变量的散点图,可以比较方便的看出AQI和PM2.5有很强的相关性。

02

使用hue参数分类显示,使用不同颜色描述不同的类别。

用法:

sns.pairplot(tmp, hue = "Month", diag_kind = "hist")


当想通过不同颜色来表示不同类别时,只需要将参数hue设置成分类的字段,就可以很方便用不同颜色来显示。例如此处使用月份来分类。

03

使用核密度估计(Kernel Density Estimation, KDE)

用法:

tmp_ = tmp[(tmp["Month"] == 6) | (tmp["Month"] == 12)]

sns.pairplot(tmp_, hue = "Month", diag_kind = "kde")


当想通过核密度曲线来替换直方图,可以直接将参数diag_kind设置为"kde"。此处,通过6月份和12月份两个月份来对比,可见6月AQI值更集中(密度曲线窄,左上角),12月份出现了空气质量较差的极端值。

04

高级方法,使用自定义grid,并指定绘制方法

用法:

grid = sns.PairGrid(data = tmp_, vars = ['AQI', 'PM25', 'PM10'], height = 2)

grid = grid.map_upper(plt.scatter, color = 'r') # 矩阵右上角

grid = grid.map_diag(plt.hist, bins = 20, color = 'b', edgecolor = 'k') # 对角线

grid = grid.map_lower(sns.kdeplot, cmap = "Greens") # 矩阵左下角


当想让矩阵不同的块分别画不同类型的图,就可以使用PairGrid来自定义。此处矩阵右上角采用散点图,对角线采用直方图,左下角采用的核密度估计。

05

显示变量之间的相关系数以及一些描述信息 

用法:

grid = sns.PairGrid(data = tmp_, vars = ['AQI', 'PM25', 'PM10'], height = 2)

grid = grid.map_upper(plt.scatter, color = 'r')

grid = grid.map_upper(cal_corr, color = 'r') # 相关系数

grid = grid.map_diag(show_summary) # 详细信息

grid = grid.map_lower(sns.kdeplot, cmap = "Greens")


同时,在右上角画出散点图后,如果想看看两个变量之间的相关关系,便可以自定义cal_corr函数,并通过map_upper函数进行调用。从这里我们可以看出AQI和PM2.5的相关系数最高,达到了0.88;如果需要将某个变量的均值、标准差以及分位数进行显示,就可以自定义show_summary函数进行绘制。


代码

# 部分代码# 计算相关系数grid = sns.PairGrid(data = tmp_, vars = ['AQI', 'PM25', 'PM10'], height = 2)grid = grid.map_upper(plt.scatter, color = 'r')grid = grid.map_upper(cal_corr, color = 'r')# grid = grid.map_diag(plt.hist, bins = 20, color = 'b', edgecolor = 'k')grid = grid.map_diag(show_summary)grid = grid.map_lower(sns.kdeplot, cmap = "Greens")plt.suptitle("Pair Plot of Air Quantity") 
如果需要全部代码,后台回复“散点图”即可。


空气质量指数

植被动态变化GIF

动态烟花效果的实现

VOSviewer文献综述

带置信区间的拟合曲线

泰勒图的MATLAB实现

Python爬取高德地图--瓦片图

Manner-Kendall(M-K)---突变检验

ArcPy批量定义投影和批量投影转换

机器人局部规划算法--DWA算法原理

ArcGIS时间滑块实现车辆轨迹动态展示

GPS数据处理---在野外采样寻点中的应用

世界各国GDP排名变化--Matlab动图实现

数据分享---GIMMS NDVI 3gv1(1982-2015)

更多精彩推荐,敬请关注我们

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存