data.corr()未显示部分变量相关性,如何修改代码展示全部?
问题:相关性矩阵部分变量未显示,如何修改代码展示所有变量间的相关性?
我尝试展示数据集变量间的相关性,但部分变量的相关性未显示。使用的代码如下:
data = pd.read_csv('insurance.csv', index_col = 0) corr = data.corr() fig = plt.figure() ax = fig.add_subplot(111) cax = ax.matshow(corr,cmap='coolwarm', vmin=-1, vmax=1) fig.colorbar(cax) ticks = np.arange(0,len(data.columns),1) ax.set_xticks(ticks) plt.xticks(rotation=90) ax.set_yticks(ticks) ax.set_xticklabels(data.columns) ax.set_yticklabels(data.columns) plt.show()
当前输出仅显示部分变量的相关性,期望输出能完整展示所有变量间的关联(包含全部变量标签与完整热力图效果)。请问如何修改代码实现?
解决方法
1. 检查变量类型,确保所有变量纳入相关性计算
pd.corr()默认仅计算数值型变量的皮尔逊相关系数,若数据中存在类别型变量(如字符串、object类型),这类变量会被自动排除。需要先对其做编码处理:
# 对类别型变量做独热编码(drop_first避免多重共线性) data_encoded = pd.get_dummies(data, drop_first=True) # 重新计算全变量相关性 corr = data_encoded.corr()
2. 调整图表尺寸,避免内容截断
默认图表尺寸过小会导致部分变量标签或热力图区域被隐藏,通过figsize放大图表:
# 根据变量数量调整宽高,变量越多数值越大 fig = plt.figure(figsize=(12, 10))
3. 优化标签显示,防止重叠
若变量名较长,可缩小字体并自动调整布局:
plt.xticks(rotation=90, fontsize=9) ax.set_yticklabels(data_encoded.columns, fontsize=9) plt.tight_layout() # 自动适配布局,避免标签被截断
完整修改后的代码
import pandas as pd import matplotlib.pyplot as plt import numpy as np data = pd.read_csv('insurance.csv', index_col=0) # 处理类别变量(若存在) data_encoded = pd.get_dummies(data, drop_first=True) corr = data_encoded.corr() # 设置合适的图表尺寸 fig = plt.figure(figsize=(12, 10)) ax = fig.add_subplot(111) cax = ax.matshow(corr, cmap='coolwarm', vmin=-1, vmax=1) fig.colorbar(cax) ticks = np.arange(0, len(data_encoded.columns), 1) ax.set_xticks(ticks) plt.xticks(rotation=90, fontsize=9) ax.set_yticks(ticks) ax.set_yticklabels(data_encoded.columns, fontsize=9) # 可选:添加相关性数值标注(增强可读性) for i in range(len(data_encoded.columns)): for j in range(len(data_encoded.columns)): ax.text(j, i, round(corr.iloc[i, j], 2), ha='center', va='center', color='white') plt.tight_layout() plt.show()
关键说明
- 若数据集全为数值型变量,问题大概率是图表尺寸不足,调整
figsize+plt.tight_layout()即可解决。 - 若存在类别变量,必须先编码才能纳入相关性计算,否则这些变量不会出现在
corr矩阵中,自然无法显示在热力图里。
内容的提问来源于stack exchange,提问作者apdesloge
相关产品推荐
相关产品推荐

