这是matplotlib版本的:import pandas as pd import matplotlib. pyplot as plt import seaborn as sns from sqlalchemy import create_engine import numpy as np from sklearn. linear_model import LinearRegression from sklearn. metrics import r2_score, mean_squared_error from matplotlib. font_manager import FontProperties, findfont, fontManager import warnings warnings. filterwarnings("ignore", category=UserWarning, module="matplotlib") def detect_chinese_fonts(): chinese_fonts = [] test_chars =“中文测试" ] common_fonts = [ "SimHei', 'WenQuanYi Micro Hei', "Heiti TC', 'Microsoft YaHei', 'SimSun', 'KaiTi', 'Source Han Sans SC', 'Noto Sans CJK SC' for font in common_fonts: try: prop = FontProperties(family=font) chinese_fonts.append(font) if prop.get_name() and findfont(prop): except: continue if not chinese_fonts: default_font = findfont(FontProperties()) chinese_fonts.append(default_font) print(f"警告:未找到中文字体,将使用默认字体: (default_font)") print("提示:请安装中文字体(如SimHei、Microsoft YaHei等)以正确显示中文")db_engine create_engine("mysql+pymysql://root:123456@localhost: 3306/wd") sql_query = " SELECT年份,少儿抚养比,老年抚养比,总抚养比 FROM population_data WHERE年份BETWEEN 2004 AND 2024 ORDER BY 年份; data_frame = pd.read_sql(sql_query, db_engine) correlation_matrix = data_frame[['少儿抚养比','老年抚养比','总抚养比']].corr() x = data_frame['少儿抚养比']-values.reshape(-1, 1) # 自变量:少儿抚养比 y = data_frame['总抚养比'].values # 因变量:总抚养比 model.fit(X, y) model LinearRegression() y_pred = model.predict(×) slope = model.coef_[0] intercept model.intercept_r2 = r2_score(y, y_pred)# 决定系数# 均方误差 mse = mean_squared_error(y, y_pred) rmse = np.sqrt(mse) # 均方根误差 residuals = y - y_pred fig, (ax1, ax2) plt.subplots(1, 2, figsize-(18, 7)) sns.heatmap(correlation matrix, annot=True, cmap='coolwarm', fmt='.2f', linewidths-0.5, annot kws=('size': 12), ax=ax1)db_engine = create_engine("mysql+pymysql://root:123456@localhost:3306/wd") sql_query SELECT年份,少儿抚养比,老年抚养比,总抚养比 FROM population_data WHERE 年份 BETWEEN 2004 AND 2024 ORDER BY 年份; data_frame = pd.read_sql(sql_query, db_engine) correlation_matrix = data_frame[['少儿抚养比',‘老年抚养比','总抚养比']].corr() x = data_frame['少儿抚养比'].values.reshape(-1,1) # 自变量:少儿抚养比y = data_frame['总抚养比"].values # 因变量:总抚养比 model = LinearRegression() model.fit(x, y) y_pred = model.predict(×) slope = model.coef_[0] intercept = model.intercept_ r2 = r2_score(y, y_pred) # 决定系数mse = mean_squared_error(y,y_pred) # 均方误差rmse = np.sqrt(mse) # 均方根误差 residuals = y - y_pred fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(18, 7)) sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', fmt='.2f', linewidths=0.5, annot_kws={'size': 12}, ax=ax1)ax1.set_title('抚养比相关性热力图',fontsize=14) ax1.set_xticklabels(ax1.get_xticklabels(), rotation=45, ha='right') ax1.set_yticklabels(ax1.get_yticklabels(), rotation=0) ax2.scatter(×, y, color='blue',label='实际数据') ax2.plot(X, y_pred, color='red', linewidth=2, label=f'回归直线 (y = {slope:.2f)x + {intercept:.2f})') metrics_text = f'R2 = (r2:.4f}\nMSE= (mse:.4f}\nRMSE = (rmse:.4f)" ax2.text(0.05, 0.95, metrics_text, transform=ax2.transAxes, verticalalignment='top', bbox=dict(boxstyle='round', facecolor='white', alpha=0.8)) ax2.set_xlabel(‘少儿抚养比 (%)',fontsize=12) ax2.set_ylabel('总抚养比 (%)',fontsize=12) ax2.set_title('少儿抚养比对总抚养比的线性回归分析',fontsize=14) ax2.legend() ax2.grid(True) plt.figtext(0.5,-0.05,‘学号:22631642510 姓名:吴栋', ha='center', va='center', fontsize=12) plt.tight_layout() plt.show() plt.figure(figsize=(10, 6)) plt.scatter(X, residuals, color='green') plt.axhline(y=0, color='red', linestyle='--') plt.xlabel('少儿抚养比 (%)',fontsize=12) plt.ylabel('残差', fontsize=12) plt.title('线性回归模型的残差散点图',fontsize=14) plt.grid(True) plt.tight_layout() plt.show()