学习资料记录|python学习 - 图标签用宋体&Times New Roman字体 + 规范的混淆矩阵绘制

python学习 - 图标签用宋体&Times New Roman字体 + 规范的混淆矩阵绘制 只需复制下面一行代码即可获得效果
中文:宋体字号
英文和数字:Times New Roman字体

from matplotlib import rcParamsconfig = { "font.family": 'serif', # 衬线字体 "font.size": 10, # 相当于小四大小 "font.serif": ['SimSun'], # 宋体 "mathtext.fontset": 'stix', # matplotlib渲染数学字体时使用的字体,和Times New Roman差别不大 'axes.unicode_minus': False # 处理负号,即-号 } rcParams.update(config)

下面以绘制一个混淆矩阵进行验证
#####----导入包----# from sklearn.metrics import confusion_matrix import matplotlib.pyplot as plt import numpy as np from matplotlib.colors import ListedColormap, LinearSegmentedColormap from matplotlib.offsetbox import (TextArea, DrawingArea, OffsetImage,AnnotationBbox) from matplotlib.cbook import get_sample_data from matplotlib import rcParamsconfig = { "font.family": 'serif', # 衬线字体 "font.size": 10, # 相当于小四大小 "font.serif": ['SimSun'], # 宋体 "mathtext.fontset": 'stix', # matplotlib渲染数学字体时使用的字体,和Times New Roman差别不大 'axes.unicode_minus': False # 处理负号,即-号 } rcParams.update(config)# 定义混淆矩阵绘制函数 def plot_confusion_matrix(cm,cmap, title='混淆矩阵'): plt.imshow(cm, interpolation='nearest', cmap=cmap) plt.title(title, fontsize = 11) plt.colorbar() xlocations = np.array(range(len(labels))) plt.xticks(xlocations, labels, rotation=90, fontsize = 10) plt.yticks(xlocations, labels, fontsize=10) plt.ylabel('真实标签', fontsize=11) plt.xlabel('预测标签', fontsize = 11)###---输入数据---### # 这一块也是你需要按照自己需求要改的 test_true_label = [1,1,1,0,0,2,2,2,2,3,3,3,3,3]#测试集真实标签 test_pre_label = [1,1,1,0,0,2,2,2,1,3,3,3,0,3]#测试集预测标签# 注意: 外圈故障:0, 内圈故障:1滚动体故障:2正常:3 # 因此是先将 test_true_label从0-3排列好,再与labels一一对应起来 labels = ['外圈故障', '内圈故障', '滚动体故障','正常']#图片显示的横纵坐标标签 tick_marks = np.array(range(len(labels))) + 0.5colors = [ "white", "orange"]#颜色渐变色是从白到橘色 cmap1 = LinearSegmentedColormap.from_list("mycmap", colors)###---转换成混淆矩阵---### cm = confusion_matrix(test_true_label, test_pre_label) np.set_printoptions(precision=2) cm_normalized = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis] print('混淆矩阵:\n',cm)###---绘图---### plt.figure(figsize=(3, 3), dpi=500) ind_array = np.arange(len(labels)) x, y = np.meshgrid(ind_array, ind_array)for x_val, y_val in zip(x.flatten(), y.flatten()): c1 = cm_normalized[y_val][x_val] c2 = cm[y_val][x_val] if c1 > 0.0001: plt.text(x_val, y_val, "%d/%0.2f" % ( c2, c1), color='black', fontsize=10, va='center', ha='center')plt.gca().set_xticks(tick_marks, minor=True) plt.gca().set_yticks(tick_marks, minor=True) plt.gca().xaxis.set_ticks_position('none') plt.gca().yaxis.set_ticks_position('none') plt.grid(True, which='minor', linestyle='-') plt.gcf().subplots_adjust(bottom=0.15)plot_confusion_matrix(cm_normalized, cmap=cmap1, title='混淆矩阵') # save_file_path= 'E:\研究生\pytorch\随机森林-混淆矩阵.png' # plt.savefig(save_file_path, dpi=500,bbox_inches='tight')

>>>结果输出 混淆矩阵: [[2 0 0 0] [0 3 0 0] [0 0 4 0] [0 0 0 5]]

学习资料记录|python学习 - 图标签用宋体&Times New Roman字体 + 规范的混淆矩阵绘制
文章图片

【学习资料记录|python学习 - 图标签用宋体&Times New Roman字体 + 规范的混淆矩阵绘制】这样出的图是不是很好看,千万不要黑底红字!!!不然导师骂惨
下面是错误示范
学习资料记录|python学习 - 图标签用宋体&Times New Roman字体 + 规范的混淆矩阵绘制
文章图片

    推荐阅读