import osimport numpy as npimport pandas as pdimport seaborn as snsimport matplotlib as mplimport matplotlib.pyplot as pltfrom matplotlib import font_manager as fm# =========================# 字体设置# =========================win_fonts = r"C:\Windows\Fonts"for p in [ os.path.join(win_fonts, "times.ttf"), os.path.join(win_fonts, "timesbd.ttf"), os.path.join(win_fonts, "timesi.ttf"), os.path.join(win_fonts, "simsun.ttc"),]: if os.path.exists(p): try: fm.fontManager.addfont(p) except Exception: passmpl.rcParams["font.family"] = ["Times New Roman", "SimSun"]mpl.rcParams["axes.unicode_minus"] = False# =========================# 输出路径# =========================OUT_DIR = r"D:\py_figs"os.makedirs(OUT_DIR, exist_ok=True)# =========================# 构造示例数据# =========================np.random.seed(42)data = pd.DataFrame({ "Var1": np.random.normal(0,1,200), "Var2": np.random.normal(0,1,200), "Var3": np.random.normal(0,1,200), "Var4": np.random.normal(0,1,200), "Var5": np.random.normal(0,1,200),})data["Var2"] = data["Var1"] * 0.8 + np.random.normal(0,0.2,200)data["Var4"] = data["Var3"] * -0.7 + np.random.normal(0,0.3,200)# =========================# 计算相关矩阵# =========================corr = data.corr()corr = corr.sort_values(by=corr.columns[0], ascending=False)corr = corr.loc[corr.index]mask = np.triu(np.ones_like(corr, dtype=bool))# =========================# 绘图# =========================fig, ax = plt.subplots(figsize=(6,5))sns.heatmap( corr, mask=mask, cmap="RdBu_r", vmin=-1, vmax=1, center=0, annot=True, fmt=".2f", annot_kws={"size":9}, square=True, cbar_kws={"shrink":0.8})ax.set_title("Correlation Matrix / 相关矩阵", fontsize=14)# =========================# 保存# =========================out_path = os.path.join(OUT_DIR, "correlation_heatmap.jpg")fig.savefig(out_path, dpi=300, bbox_inches="tight")plt.close()print("Saved:", out_path)