当前位置:首页>python>期刊图片复现|Python绘制多项性能评估指标集成混淆矩阵图

期刊图片复现|Python绘制多项性能评估指标集成混淆矩阵图

  • 2026-10-11 06:44:25
期刊图片复现|Python绘制多项性能评估指标集成混淆矩阵图

代码绘制成果展示

论文:A robust and efficient approach to estimating the age of secondary  mangrove forests employing time-series Landsat images and the  CCDC model
论文原图
仿图

多项性能评估指标集成混淆矩阵解析:

该图展示了一个精美的多目标分类混淆矩阵,通过多维度的视觉直观地呈现了模型的分类性能。

1. 标题与编号定位

图表标题:位于图片正上方居中位置,概括了该图的核心研究主题。

子图编号:左上角的标识 (b) 表明此图是某组多图矩阵的第二个子图。

2. 真实值 vs 预测值

真实类别:矩阵外围顶部横向排列的列标题代表了数据样本的真实类别。包含“Disturbed”与“Un-disturbed”两个类别,分别对应真实的“正类”和“负类”。

预测类别:矩阵左侧纵向排列的行标题则代表了分类模型给出的预测结果,同样包含这两个类别。

3. 核心数据区:

矩阵内部由中心十字虚线划分为四个象限,每个象限结合了定量数据与定性视觉元素,展示了四种基本的预测结果:TP(真正例)、FN(假负例)、FP(假正例)与 TN(真负例)。每个象限内不仅清晰标注了具体的数字百分比,还包含一个以中心十字虚线交叉点为圆心的四分之一扇形。扇形的半径大小与颜色深浅协同映射了对应象限的数值大小。数值越高,扇形面积越大且颜色越饱和。

4. 辅助图例与综合评价指标

颜色条:矩阵右侧配备了一条垂直的渐变颜色条,作为内部扇形颜色深浅的视觉映射图例,准确解读颜色所代表的具体数值区间。

模型性能指标:在混淆矩阵的正下方,结构清晰地列出了三大核心综合评价指标:

Precision(精确率):位于底部左侧的独立矩形框中,评估模型预测为正类的样本中实际为正类的比例。

Recall(召回率):位于底部右侧的独立矩形框中,评估在所有真实的分类样本中,被模型正确找出的比例。

F1-Score(F1分数):横跨最下方的矩形框,作为精确率与召回率的调和平均数,为模型在潜在的数据不平衡情况下提供了单一且全面的性能评价。

多种配色

代码解释

第一部分

库的导入以及字体设置
# =========================================================================================# ====================================== 1. 环境设置 =======================================# =========================================================================================import numpy as npimport matplotlib.pyplot as pltimport matplotlib.colors as mcolorsfrom matplotlib.patches import Wedge, Rectanglefrom sklearn.model_selection import train_test_split, GridSearchCVfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.metrics import confusion_matrix, precision_score, recall_score, f1_scoreimport pandas as pdimport matplotlibmatplotlib.rcParams['pdf.fonttype'] = 42matplotlib.rcParams['ps.fonttype'] = 42plt.rcParams['font.family'] = 'serif'plt.rcParams['font.serif'] = ['Times New Roman']plt.rcParams['axes.unicode_minus'] = False

第二部分

颜色库的设置以及配色方案的选择
# =========================================================================================# ======================================2.颜色库=======================================# =========================================================================================COLOR_SCHEMES = {    1: ["#eefaeb", "#7ec8cc", "#1571b1", "#002868"],}SCHEME_ID = 60 #选取配色方案colors = COLOR_SCHEMES.get(SCHEME_ID, COLOR_SCHEMES[1]) #获取配色cmap = mcolors.LinearSegmentedColormap.from_list("custom_cmap", colors) #创建平滑过渡的线性渐变色图

第三部分

绘图函数:画布初始化与数据提取
# =========================================================================================# ======================================4.绘图函数======================================# =========================================================================================def plot_custom_confusion_matrix(metrics):    # 创建画布    fig, ax = plt.subplots(figsize=(6.5, 8), dpi=150)    ax.set_xlim(-0.3, 2.2) #X轴范围    ax.set_ylim(-0.5, 2.5) #Y轴范围    precision = metrics['precision'] #精确率    recall = metrics['recall'] #召回率    f1 = metrics['f1'] #F1-Score

第四部分

绘图函数:绘制结构背景底框
    bg_color = '#f2f2f2' #侧边/底部标签背景色    line_color = 'black' #边框线颜色    lw_thick = 1.5 #框线粗细    lw_thin = 1.0 #内部分割线粗细    ax.add_patch(Rectangle((1, 2), 1, 0.25, facecolor=bg_color, edgecolor=line_color, lw=lw_thick, zorder=1))    #底部左侧(对应列汇总/指标)背景矩形框    ax.add_patch(Rectangle((0, -0.25), 1, 0.25, facecolor=bg_color, edgecolor=line_color, lw=lw_thick, zorder=1))    #底部右侧(对应列汇总/指标)背景矩形框    ax.add_patch(Rectangle((1, -0.25), 1, 0.25, facecolor=bg_color, edgecolor=line_color, lw=lw_thick, zorder=1))    #最底部(用于放置 F1-Score)的背景矩形框    ax.add_patch(Rectangle((0, -0.5), 2, 0.25, facecolor=bg_color, edgecolor=line_color, lw=lw_thick, zorder=1))    #中心主数据区域背景底图    ax.add_patch(Rectangle((0, 0), 2, 2, facecolor='white', edgecolor='none', zorder=1))

第五部分

绘图函数:绘制核心数据映射扇形图
    center = (1, 1) #中心扇形图表的圆心坐标    # 代表FN的扇形    ax.add_patch(Wedge(center, fn, 0, 90, facecolor=cmap(fn), edgecolor='none', zorder=3))    # 代表FP的扇形    ax.add_patch(Wedge(center, fp, 180, 270, facecolor=cmap(fp), edgecolor='none', zorder=3))    # 代表TN的扇形    ax.add_patch(Wedge(center, tn, 270, 360, facecolor=cmap(tn), edgecolor='none', zorder=3))

第六部分

绘图函数:绘制参考线与坐标网格
   #中心区域的水平十字分割线    ax.plot([0, 2], #X            [1, 1], #Y            color='gray', #线条颜色            lw=lw_thin, #线宽            zorder=4) #图层    ax.add_patch(Rectangle((0, 0), #左下角起点                           2, #宽度                           2, #高度                           fill=False, #填充颜色                           edgecolor=line_color, #边框颜色                           lw=lw_thick, #边框宽度                           zorder=5)) #图层

第七部分

绘图函数:填充各种文字标签与指标数值
    #子图编号    ax.text(-0.2, #X            2.35, #Y            '(b)', #文本            ha='left', #水平            va='center', #垂直            fontweight='bold', #加粗            fontsize=20) #字体大小    #底部左侧精确率指标及数值    ax.text(0.5, -0.125, f'Precision={precision * 100:.2f}%', ha='center', va='center', fontweight='bold', fontsize=13)    #底部右侧召回率指标及数值    ax.text(1.5, -0.125, f'Recall={recall * 100:.2f}%', ha='center', va='center', fontweight='bold', fontsize=13)    #最下方F1-Score 及数值    ax.text(1.0, -0.375, f'F1-Score={f1 * 100:.2f}%', ha='center', va='center', fontweight='bold', fontsize=15)

第八部分

绘图函数:绘制颜色条以及绘图结果保存
    #颜色条几何参数    cb_x, cb_y, cb_w, cb_h = 2, 0, 0.2, 2    #外边框    ax.add_patch(Rectangle((cb_x, cb_y), #坐标                           cb_w, #宽                           cb_h, #高                           fill=False, #透明                           edgecolor=line_color, #边框颜色                           lw=lw_thick, #边框线宽                           zorder=2)) #层    ax.text(cb_x + cb_w / 2, cb_y + cb_h + 0.05, '100%', ha='center', va='bottom', fontweight='bold', fontsize=14) #上方文本    ax.text(cb_x + cb_w / 2, cb_y - 0.05, '0%', ha='center', va='top', fontweight='bold', fontsize=14) #下方文本    plt.tight_layout() #自动调整子图参数

第九部分

执行部分
# =========================================================================================# ======================================4.执行部分=====================================# =========================================================================================if __name__ == '__main__':    excel_path = r"data.xlsx" #原始文件路径    df_data = pd.read_excel(excel_path) #读取数据    X = df_data.iloc[:, :-1].values #X    y = df_data.iloc[:, -1].values #y    #划分数据    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)    #参数网格字典    param_grid = {        'n_estimators': [50, 100, 200],    }    #实例化GridSearchCV对象    grid_search = GridSearchCV(estimator=RandomForestClassifier(random_state=42), param_grid=param_grid, cv=5, scoring='f1')    grid_search.fit(X_train, y_train) #执行网格搜索拟合    best_model = grid_search.best_estimator_ #提取最佳模型    print(f"最佳超参数: {grid_search.best_params_}")    y_pred = best_model.predict(X_test) #对测试集进行预测    #将刚计算出的所有比例和性能指标整合打包    metrics = {        'TP_perc': TP_perc, 'FP_perc': FP_perc,        'FN_perc': FN_perc, 'TN_perc': TN_perc,        'precision': precision, 'recall': recall, 'f1': f1    }    #调用绘图函数    plot_custom_confusion_matrix(metrics)

如何应用到你自己的数据

1.设置配色方案:

SCHEME_ID = 60 #选取配色方案

2.设置绘图结果的保存地址:

plt.savefig(fr"{SCHEME_ID}.pdf", bbox_inches='tight')

3.设置原始数据保存的路径:

excel_path = r"data.xlsx" #原始文件路径

4.提取特征变量:

X = df_data.iloc[:, :-1].values #X

5.提取目标:

y = df_data.iloc[:, -1].values #y

6.划分数据集:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

7.设置模型的超参数网格:

param_grid = {    'n_estimators': [50, 100, 200],}

推荐

期刊图片复现|Python绘制二维偏依赖PDP图
期刊复现|python绘制基于SHAP分析和GAM模型拟合的单特征依赖图
期刊图片复现|python绘制带有渐变颜色shap特征重要性组合图(条形图+蜂巢图)
期刊复现|用Python绘制SHAP特征重要性总览图、依赖图、双特征交互效应SHAP图,解锁XGBoost模型的终极奥秘
期刊图片复现|Python绘制shap重要性蜂巢图+单特征依赖图+交互效应强度气泡图+交互效应依赖图(回归+二分类+分类)

获取方式

公众号中代码需要请后台私信我,注意只会分享练习数据和代码文件,不会提供答疑服务,代码文件中已经包含了每行代码的完整注释!!!

最新文章

随机文章