import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import time
# 设置支持中文的字体
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定中文字体为黑体
plt.rcParams['axes.unicode_minus'] = False # 正确显示负号
def generate_heatmap_from_excel(excel_path, sheet_name=0, output_path='heatmap.png'):
try:
# 读取 Excel 文件
data = pd.read_excel(excel_path, sheet_name=sheet_name, index_col=0)
print("Excel 文件读取成功!")
# 检查数据是否为空
if data.empty:
print("数据为空,请检查 Excel 文件内容!")
return
max_num = 226
i = 0
while i < max_num:
val = data.iloc[i, max_num]
if val < 0.4:
data = data.drop(index=data.index[i])
data = data.drop(data.columns[i], axis=1)
max_num -= 1
else:
i += 1
data.dropna(axis=0, how="all", inplace=True) # 删除excel空白行代码
data.dropna(axis=1, how="all", inplace=True) # 删除excel空白列代码
data = data.fillna(0)
# 绘制热力图
plt.figure(figsize=(40, 32)) # 10, 8 200, 160
sns.heatmap(data, annot=True, cmap='viridis', fmt=".4f", linewidths=.1, annot_kws={"size": 8},
cbar_kws={"labelsize": 8})
plt.title('Correlation Heatmap', fontsize=16)
# 调整刻度字体大小
plt.xticks(fontsize=8)
plt.yticks(fontsize=8)
# 保存热力图为图片
plt.savefig(output_path)
print(f"热力图已保存到:{output_path}")
except FileNotFoundError:
print(f"文件未找到,请检查路径:{excel_path}")
except Exception as e:
print(f"发生错误:{e}")
if __name__ == "__main__":
# 设置 Excel 文件路径和工作表名称
excel_path = './corr.xlsx' # Excel 文件路径
sheet_name = 0 # 工作表索引
output_path = './heatmap.png' # 保存热力图的路径
# 生成热力图
start_time = time.time()
generate_heatmap_from_excel(excel_path, sheet_name, output_path)
end_time = time.time()
execution_time = end_time - start_time
print("time: ", execution_time)
支持显示中文字体。