day9
热力图和子图的绘制
知识点:
- 介绍了热力图的绘制方法
- 介绍了enumerate()函数
- 介绍了子图的绘制方法
作业:
尝试对着心脏病数据集绘制热力图和单特征分布的大图(包含几个子图)
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
data = pd.read_csv(r'heart.csv')
print(data.info())
# 自动识别连续值特征
# 假设连续值特征为数值类型且唯一值数量大于一定阈值(这里设为10)
continuous_features = []
for col in data.columns:
if data[col].dtype in ['int64', 'float64'] and data[col].nunique() > 10:
continuous_features.append(col)
print("连续值特征:", continuous_features)
# 提取连续值特征的数据
continuous_data = data[continuous_features]
# 计算连续值特征的相关系数矩阵
correlation_matrix = continuous_data.corr()
# 设置图片清晰度
plt.rcParams['figure.dpi'] = 100
#1. 绘制热力图
plt.figure(figsize=(10, 8))
sns.heatmap(correlation_matrix, annot=True, fmt=".2f", cmap='coolwarm')
plt.title('Correlation Heatmap of Continuous Features')
plt.show()
#2.子图的绘制
features = continuous_features[:4] # 选择前4个连续值特征进行绘图
plt.rcParams['figure.dpi'] = 100
# 创建2x2的子图
fig, axes = plt.subplots(2, 2, figsize=(12, 10))
# 遍历每个特征并绘制散点图
#3.enumerate()函数的使用
#enumerate()函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在for循环当中。
for i, feature in enumerate(features):
row = i // 2 # 计算当前子图的行索引
# 例如 0//2=0, 1//2=0, 2//2=1, 3//2=1
col = i % 2 # 计算当前子图的列索引
#绘制箱线图
axes[row, col].boxplot(data[feature].dropna()) # 去除缺失值
# 设置子图标题
axes[row, col].set_title(f'Boxplot of {feature}')
# 设置x轴标签
axes[row, col].set_xlabel('Feature')
# 调整子图间距
plt.tight_layout()
# 显示图形
plt.show()