• Python实现matplotlib显示中文的方法详解


    文实例讲述了Python实现matplotlib显示中文的方法。分享给大家供大家参考,具体如下:

    【注意】

    可能与本文主题无关,不过我还是想指出来:使用matplotlib库时,下面两种导入方式是等价的(我指的是等效,当然这个说法可以商榷:)

    1
    import matplotlib.pyplot as plt
    1
    import pylab as plt

    【效果图】

    【方式一】FontProperties

    1
    2
    3
    4
    5
    6
    7
    8
    import matplotlib.pyplot as plt
    from matplotlib.font_manager import FontProperties # 步骤一
    # ...
    font = FontProperties(fname=r"c:windowsfontssimsun.ttc", size=14) # 步骤二
    plt.xlabel("x轴", fontproperties=font) # 步骤三
    plt.ylabel("y轴", fontproperties=font)
    plt.title("标题", fontproperties=font)
    plt.show()

    总的来说,很丑陋。

    【方式二】 fontproperties

    1
    2
    3
    4
    5
    6
    import matplotlib.pyplot as plt
    # ...
    plt.xlabel("x轴")
    plt.ylabel("y轴", fontproperties="SimSun") # 步骤一  (宋体)
    plt.title("标题", fontproperties="SimHei") #     (黑体)
    plt.show()

    灵活,另一个优点:不污染全局字体设置

    【方式三】rcParams

    1
    2
    3
    4
    5
    6
    7
    8
    import matplotlib.pyplot as plt
    plt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(替换sans-serif字体)
    plt.rcParams['axes.unicode_minus'] = False  # 步骤二(解决坐标轴负数的负号显示问题)
    #...
    plt.xlabel("x轴")
    plt.ylabel("y轴")
    plt.title("标题")
    plt.show()

    简洁的用法。缺点:污染全局字体设置。(所以需要第二步骤)

    【方式四】rc

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import matplotlib.pyplot as plt
    font = {'family' : 'SimHei',
        'weight' : 'bold',
        'size'  : '16'}
    plt.rc('font', **font)        # 步骤一(设置字体的更多属性)
    plt.rc('axes', unicode_minus=False) # 步骤二(解决坐标轴负数的负号显示问题)
    #...
    plt.xlabel("x轴")
    plt.ylabel("y轴")
    plt.title("标题")
    plt.show()

    灵活的用法。缺点:影响全局字体(所以需要第二步骤)

    【总结】

    方式二用时才设置,且不会污染全局字体设置,更灵活
    方式三、方式四不需要对字体路径硬编码,而且一次设置,多次使用,更方便。

    【测试代码】

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    import numpy as np
    import matplotlib.pyplot as plt
    font = {'family' : 'DFKai-SB',
        'weight' : 'bold',
        'size'  : '16'}
    plt.rc('font', **font) # pass in the font dict as kwargs
    plt.rc('axes',unicode_minus=False)
    x = np.linspace(0, 10, 1000)
    y = np.sin(x)
    z = np.cos(x**2)
    plt.figure(figsize=(8,4))
    plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2)
    plt.plot(x,z,"b--",label="$cos(x^2)$")
    plt.xlabel("x轴")
    plt.ylabel("y轴")
    plt.title("标题")
    plt.ylim(-1.2,1.2)
    plt.legend()
    plt.show()

    运行结果:

    【附录】

    一些中文字体的英文名

    宋体 SimSun
    黑体 SimHei
    微软雅黑 Microsoft YaHei
    微软正黑体 Microsoft JhengHei
    新宋体 NSimSun
    新细明体 PMingLiU
    细明体 MingLiU
    标楷体 DFKai-SB
    仿宋 FangSong
    楷体 KaiTi
    隶书 LiSu
    幼圆 YouYuan
    华文细黑 STXihei
    华文楷体 STKaiti
    华文宋体 STSong
    华文中宋 STZhongsong
    华文仿宋 STFangsong
    方正舒体 FZShuTi
    方正姚体 FZYaoti
    华文彩云 STCaiyun
    华文琥珀 STHupo
    华文隶书 STLiti
    华文行楷 STXingkai
    华文新魏 STXinwei
  • 相关阅读:
    java String format格式字符串语法
    spring 小示例 yongqi
    mysql GROUP_CONCAT()函数最大长度之坑 yongqi
    连接数据库超时设置autoReconnect=true mysql经典的8小时问题 yongqi
    Kafka 可视化工具(Kafka Tool) yongqi
    kettle 优化 yongqi
    mysql 修改字段名 yongqi
    SQL: Cannot drop database XXX because it is currently in use解决方法 yongqi
    .Net Core 控制台应用程序 依赖注入
    记一次部署Skywalking(基于Elasticsearch),并使用 .NET6接入Skywalking
  • 原文地址:https://www.cnblogs.com/HGNET/p/15087194.html
Copyright © 2020-2023  润新知