pandas绘制矩阵散点图(scatter_matrix)的方法

本文使用sklearn的iris数据集进行可视化分析,通过scatter_matrix函数展示各特征之间的分布情况,帮助理解数据集特征间的关系。
部署运行你感兴趣的模型镜像

以 sklearn的iris样本为数据集

 

import matplotlib.pyplot as plt
from scipy import sparse
import numpy as np
import matplotlib as mt
import pandas as pd
from IPython.display import display
from sklearn.datasets import load_iris
import sklearn as sk
from sklearn.model_selection import  train_test_split

iris=load_iris()
#print(iris)
X_train,X_test,y_train,y_test = train_test_split(iris['data'],iris['target'],random_state=0)
iris_dataframe = pd.DataFrame(X_train,columns=iris.feature_names)
grr = pd.plotting.scatter_matrix(iris_dataframe,c=y_train,figsize=(15,15),marker='o',hist_kwds={'bins':20},s=60,alpha=.8)
plt.show()

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>我们正在讨论的是pandasscatter_matrix函数。根据引用,我们知道在Pandas 0.25版本之后,`scatter_matrix`函数从`pandas`顶级模块移到了`pandas.plotting`子模块中。因此,现在正确的导入和使用方式是`pandas.plotting.scatter_matrix`。 用户意图是了解或解决与使用Pandas的plotting模块中的scatter_matrix函数相关的问题,因此我们将详细介绍该函数的使用方法。 ### 函数功能 `scatter_matrix`用于绘制DataFrame中数值列的两两散点图矩阵,并在对角线上显示每个变量的分布(默认为直方图,也可设置为核密度图)。这有助于快速分析多变量之间的关系。 ### 函数参数 根据引用[3],函数的基本参数如下: ```python pandas.plotting.scatter_matrix( frame, alpha=0.5, figsize=None, ax=None, grid=False, diagonal='hist', marker='.', density_kwds=None, hist_kwds=None, range_padding=0.05, **kwds ) ``` 参数说明: - `frame`: DataFrame,需要绘制的数据。 - `alpha`: 透明度,0(透明)到1(不透明)。 - `figsize`: 图像尺寸,元组(宽度,高度),单位为英寸。 - `ax`: Matplotlib的轴对象,如果为None,则创建新图。 - `grid`: 是否显示网格线。 - `diagonal`: 对角线上的图形类型,可选'hist'(直方图)或'kde'(核密度估计图)。 - `marker`: 散点图的标记符号,例如'.'(点)、'o'(圆圈)等。 - `density_kwds`: 当`diagonal='kde'`时传递给核密度图的参数字典。 - `hist_kwds`: 当`diagonal='hist'`时传递给直方图的参数字典。 - `range_padding`: 图像在x轴和y轴上的额外填充(比例),默认为0.05。 - `**kwds`: 其他关键字参数将传递给Matplotlib的`scatter`函数。 ### 使用步骤 1. 导入必要的库:pandas和matplotlib.pyplot(用于显示图像)。 2. 准备DataFrame数据。 3. 调用`pandas.plotting.scatter_matrix`函数。 4. 使用`matplotlib.pyplot.show()`显示图像。 ### 示例代码 下面是一个使用示例: ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt from pandas.plotting import scatter_matrix # 创建一个DataFrame np.random.seed(0) df = pd.DataFrame(np.random.randn(1000, 4), columns=['A', 'B', 'C', 'D']) # 绘制散点图矩阵 scatter_matrix( df, alpha=0.5, figsize=(10, 10), diagonal='kde', # 对角线使用核密度图 grid=True, marker='o', density_kwds={'color': 'green', 'alpha': 0.5}, hist_kwds=None # 因为diagonal='kde',所以这里用不到 ) plt.show() ``` ### 注意事项 1. **版本问题**:在Pandas 0.25之前,可以直接使用`pd.scatter_matrix`,但之后必须使用`pandas.plotting.scatter_matrix`或从`pandas.plotting`导入[^2]。 2. **对角线设置**:如果设置`diagonal='kde'`,则对角线将绘制核密度估计图;如果设置`diagonal='hist'`,则绘制直方图。 3. **样式调整**:通过`density_kwds`和`hist_kwds`可以传递字典参数来调整密度图或直方图的样式,例如颜色、透明度等。 4. **图像大小**:当变量较多时,建议设置较大的`figsize`以保证每个小图清晰可辨。 ### 常见问题解决 - **导入错误**:如果遇到`scatter_matrix`未定义,请检查Pandas版本并确保正确导入: ```python # 正确导入方式 from pandas.plotting import scatter_matrix ``` - **图形重叠**:调整`figsize`和`range_padding`参数,使图形布局更合理。 ### 相关引用 [^1]: [Pandas官方文档:pandas.plotting.scatter_matrix](http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.plotting.scatter_matrix.html) [^2]: 在Pandas 0.25之后,`scatter_matrix`函数的位置变更说明。 [^3]: [pandas.plotting.scatter_matrix参数说明](https://pandas.pydata.org/pandas-docs/version/0.25.0/reference/api/pandas.plotting.scatter_matrix.html#pandas-plotting-scatter-matrix) §§相关问题§§ 1. 如何调整散点图矩阵中单个子图的大小或样式? 2. 如何将散点图矩阵保存为图片文件? 3. 如何处理散点图矩阵中大量数据点的重叠问题? 4. 除了散点图矩阵Pandas还提供了哪些多变量关系可视化方法?</think>### Pandas `scatter_matrix` 函数使用指南 `pandas.plotting.scatter_matrix` 是用于创建**多变量关系可视化矩阵**的核心函数,可同时展示数据集中所有数值变量的分布和两两关系。以下是详细使用方法(基于 Pandas ≥0.25 版本): --- #### 一、基础语法 ```python from pandas.plotting import scatter_matrix scatter_matrix( frame, # 目标DataFrame alpha=0.5, # 点透明度 figsize=(10, 10), # 图像尺寸 grid=True, # 是否显示网格 diagonal='hist', # 对角线图类型: 'hist'直方图 | 'kde'密度图 marker='.', # 散点标记样式 hist_kwds={'bins': 20}, # 直方图参数 **kwargs # 其他matplotlib参数 ) ``` --- #### 二、核心参数详解 | **参数** | **类型** | **说明** | |------------------|---------------|-------------------------------------------------------------------------| | `frame` | DataFrame | **必需**,包含数值型数据的DataFrame | | `alpha` | float (0-1) | 点透明度,避免重叠点遮挡(默认0.5)[^1] | | `diagonal` | str | 对角线图表类型:`'hist'`(直方图)或 `'kde'`(核密度估计)[^3] | | `marker` | str | 散点形状:`'.'`(), `'o'`(), `'s'`()等 | | `hist_kwds` | dict | 直方图参数:`{'bins': 30, 'color': 'blue'}` | | `density_kwds` | dict | 当`diagonal='kde'`时使用的KDE参数 | | `range_padding` | float | 坐标轴边距(默认0.05) | --- #### 三、完整使用示例 ```python import pandas as pd import numpy as np from pandas.plotting import scatter_matrix import matplotlib.pyplot as plt # 创建示例数据 np.random.seed(42) data = pd.DataFrame({ 'Height': np.random.normal(170, 10, 100), 'Weight': np.random.normal(65, 15, 100), 'Age': np.random.randint(18, 65, 100), 'Income': np.random.exponential(5000, 100) }) # 绘制散点图矩阵 scatter_matrix( data, figsize=(12, 12), alpha=0.8, diagonal='kde', # 对角线用密度图 grid=True, marker='o', hist_kwds={'bins': 15, 'edgecolor': 'black'}, density_kwds={'color': 'red', 'alpha': 0.6} ) plt.suptitle('多变量关系矩阵', fontsize=16) plt.tight_layout() plt.savefig('scatter_matrix.png', dpi=300) # 保存高清图像 plt.show() ``` --- #### 四、关键注意事项 1. **版本兼容性** - Pandas ≥0.25:必须使用 `from pandas.plotting import scatter_matrix`[^2] - Pandas <0.25:可用 `pd.scatter_matrix()`(已弃用) 2. **数据预处理** - 仅绘制数值列(自动跳过类别型变量) - 建议先标准化数据避免尺度差异: ```python from sklearn.preprocessing import StandardScaler data_scaled = pd.DataFrame(StandardScaler().fit_transform(data), columns=data.columns) ``` 3. **重叠点处理** - 调整 `alpha`(透明度)和 `s`(点大小)参数: ```python scatter_matrix(data, alpha=0.3, s=10) # 小尺寸+低透明度 ``` --- #### 五、输出效果说明 - **对角线**:显示单变量分布(直方图/密度曲线) - **非对角线**:两变量间的散点关系 - **颜色映射**:添加 `c` 参数可引入第三维度: ```python scatter_matrix(data, c=data['Income'], cmap='viridis') ``` ![散点图矩阵示例](https://pandas.pydata.org/pandas-docs/stable/_images/frame_scatter_matrix_kde.png) > **输出说明**:每个散点图展示两个变量的相关性,对角线显示单变量分布,颜色映射可表示第三个变量。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值