如何按顺序绘制DataFrame指定列对的散点图及Pearson相关系数
批量绘制对应列对的散点图并计算Pearson相关系数
核心代码实现
假设你已导入所需库,直接用以下代码遍历对应列对完成绘图和系数计算:
import pandas as pd import matplotlib.pyplot as plt from scipy.stats import pearsonr # 定义要配对的列组 npm_col = ["snv", "het-hom", "ti-tv"] drg_col = ["snv-drg", "het-hom-drg", "ti-tv-drg"] # 遍历每一组对应列 for npm_col_name, drg_col_name in zip(npm_col, drg_col): # 提取数据并处理缺失值(避免计算和绘图报错) x_data = merged_dft[npm_col_name].dropna() y_data = merged_dft[drg_col_name].dropna() # 确保两组数据长度一致(同步删除缺失值) common_indices = x_data.index.intersection(y_data.index) x = x_data.loc[common_indices] y = y_data.loc[common_indices] # 计算Pearson相关系数和p值 corr_coef, p_value = pearsonr(x, y) # 绘制散点图 plt.figure(figsize=(8, 6)) plt.scatter(x, y, alpha=0.6, color="#1f77b4") plt.title(f"{npm_col_name} vs {drg_col_name}\nPearson相关系数: {corr_coef:.3f}, p值: {p_value:.3e}") plt.xlabel(npm_col_name) plt.ylabel(drg_col_name) plt.grid(True, linestyle="--", alpha=0.7) plt.show()
常见问题修正点
- 列配对错误:必须用
zip()函数将npm_col和drg_col按顺序一一配对,避免列对应关系混乱 - 缺失值处理:如果数据包含
NaN,必须同步清理两组数据的缺失值(用index.intersection确保数据对齐),否则pearsonr会返回无效结果 - KeyError:检查
merged_dft中是否存在所有指定的列名,确保列名拼写完全一致
可选:多子图布局
如果需要将三个散点图放在同一画布上,用以下代码:
fig, axes = plt.subplots(1, 3, figsize=(22, 6)) for idx, (npm_col_name, drg_col_name) in enumerate(zip(npm_col, drg_col)): x_data = merged_dft[npm_col_name].dropna() y_data = merged_dft[drg_col_name].dropna() common_indices = x_data.index.intersection(y_data.index) x = x_data.loc[common_indices] y = y_data.loc[common_indices] corr_coef, p_value = pearsonr(x, y) ax = axes[idx] ax.scatter(x, y, alpha=0.6, color="#ff7f0e") ax.set_title(f"{npm_col_name}\nvs {drg_col_name}\nCorr: {corr_coef:.3f}") ax.set_xlabel(npm_col_name) ax.set_ylabel(drg_col_name) ax.grid(True, linestyle="--", alpha=0.7) plt.tight_layout() plt.show()
内容的提问来源于stack exchange,提问作者user3214212
相关产品推荐
相关产品推荐

