如何在Python-matplotlib绘图中使用中文粗体

这里写自定义目录标题

  • 如何在matplotlib中使用中文粗体
  • 1. 仅设置中英混合标题中的英文粗体
  • 2. 局部设置中文粗体
  • 3. 如果不希望每次都在开头导入字体
  • 5. 设置全局中文粗体
  • 如何在matplotlib中使用中文粗体

    我发现,在使用matplotlib画图时,当不设置中文字体(无需显示中文)时,在plt.title,ptl.xlabel等函数中,使用fontweight='bold'参数,可以成功使其加粗,如下图所示。

    但当需要使用中文时,需使用如下代码设置中文字体:

    config = {
        "font.family":'serif',
        "font.size": 20,
        "font.serif":'KaiTi',
        "axes.unicode_minus":False,
    }
    plt.rcParams.update(config)
    

    此时,无论我们是在config中添加'font.weight':"bold",设置全局中文;亦或是如之前所述使用fontweight='bold'参数,单独设置某个标题加粗,均没有变化(且其中英文也一并使用了中文字体),如下图所示:

    1. 仅设置中英混合标题中的英文粗体

    在设置中中文字体时,可设置公式字体为"stix",其是一种类似"Times New Roman"的字体),如下所示:

    config = {
        "font.family":'serif',
        "font.size": 20,
        "mathtext.fontset":'stix',
        "font.serif":'KaiTi',
        "axes.unicode_minus":False,
    }
    plt.rcParams.update(config)
    

    此时,对于标题中的英文,我们可以通过将其表示为公式,将其设置为粗体,并且同时是"Times New Roman"字体,代码与结果如下所示:

    # 示例数据
    x = [1, 2, 3, 4, 5]
    y = [2, 3, 5, 7, 11]
    
    # 绘图
    plt.plot(x, y)
    
    # 添加标题和标签,使用 serif 字体并设置为粗体
    plt.title(r'$\mathbf{Title}$标题',size=20)  # 正体加粗
    plt.xlabel(r'$\mathrm{X}$坐标轴',size=16)  # 正体
    plt.ylabel(r'$Y$坐标轴',size=16)  # 斜体
    
    # 显示图形
    plt.show()
    

    2. 局部设置中文粗体

    既然不能设置中文的某种字体为粗体,那就使用邪道方法,直接使用一种粗体中文字体。我选择的是方正粗楷简体,可在该网站下载,即可得到FZCKJW.TTF字体文件。

    此时使用如下代码,即可在需要的位置,将其设置为中文粗体(其他位置仍保持为中文正体或英文New Times Roman)。

    import matplotlib.pyplot as plt
    from matplotlib.font_manager import FontProperties
    
    # 指定自定义字体文件路径
    custom_font_path = r'xxx/FZCKJW.TTF'
    
    # 创建 FontProperties 对象加载自定义字体
    custom_font = FontProperties(fname=custom_font_path)
    
    # 设置全局字体参数
    config = {
        "font.family":'serif',
        "font.size": 20,
        "mathtext.fontset":'stix',
        "font.serif":'KaiTi',
        "axes.unicode_minus":False,
    }
    plt.rcParams.update(config)
    
    # 示例数据
    x = [1, 2, 3, 4, 5]
    y = [2, 3, 5, 7, 11]
    
    # 绘图
    plt.plot(x, y)
    
    # 添加标题和标签,使用 serif 字体并设置为粗体
    plt.title('Title标题', fontproperties=custom_font, fontsize=20)  # 中文粗体
    plt.xlabel(r'$\mathbf{X}$轴标签', fontproperties=custom_font, fontsize=16)  # 英文Times New Roman字体
    plt.ylabel(r'$\mathrm{Y}$轴标签', fontsize=16)  # 中文正体
    
    # 显示图形
    plt.show()
    

    3. 如果不希望每次都在开头导入字体

    该方法需要每次在程序开头都设置字体文件路径,并将其导入。如果希望能像其他系统字体那样,直接使用其字体名称来设置字体,如plt.ylabel('Y轴标签',fontname='SimSun')设置宋体,可将其添加到系统字体中,方法如下所示:

    1. 将TTF字体文件复制到C:\Windows\Fonts中;
    2. 打开注册表编辑器(Win+R,输入运行 regedit 命令);
    3. 导航到以下注册表路径: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts
    4. 在右侧窗格,创建一个新的字符串值,名称为字体的显示名称(例如,方正粗楷简体 (TrueType));
    5. 将数据设置为字体文件的文件名(例如,FZCKJW.TTF);
    6. 保存并关闭注册表编辑器。

    这样,就成功在系统中添加注册了新的字体,可以在Word字体中看到。

    但这之后并不能直接在Python中使用该字体,需要重新加载字体缓存,方法如下:

    1. 删除C:\Users\NAME.matplotlib中最新的fontlist-v390.json文件(数字390可能不同)
    2. 重新加载编译器,运行如下代码,找到新添加的TTF文件,以及其对应名称:
    import matplotlib.font_manager
    
    # 获取系统中所有已知的字体列表
    font_list = matplotlib.font_manager.findSystemFonts()
    
    # 获取已知的字体名称列表
    font_names = [matplotlib.font_manager.FontProperties(fname=f).get_name() for f in font_list]
    
    # 打印所有字体名称
    for i,font in enumerate(font_list):
        print(font,font_names[i])
    

    本例中为FZCKJW.TTFFZCuKaiS-R-GB

    之后,即可使用以下代码,设置局部中文粗体:

    plt.ylabel(r'$\mathrm{Y}$轴标签',fontname='FZCuKaiS-R-GB', fontsize=16)
    

    5. 设置全局中文粗体

    进行第4节操作后,即可按照一般全局设置方法,设置全局中文粗体,如下所示:

    config = {
        "font.family":'serif',
        "font.size": 20,
        "mathtext.fontset":'stix',
        "font.serif":'FZCuKaiS-R-GB',
        "axes.unicode_minus":False,
    }
    plt.rcParams.update(config)
    

    作者:Anderson_312

    物联沃分享整理
    物联沃-IOTWORD物联网 » 如何在Python-matplotlib绘图中使用中文粗体

    发表回复