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

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

只需复制下面一行代码即可获得效果
中文:宋体字号
英文和数字:Times New Roman字体

from matplotlib import rcParams

config = {
    "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 rcParams

config = {
    "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.5

colors = [ "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字体 + 规范的混淆矩阵绘制_第1张图片

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

你可能感兴趣的:(学习资料记录,深度学习代码,python,深度学习)