matplotlib中文展示乱码问题

背景

使用Python做数据分析时,不可避免的需要使用matplotlib画图。但它对中文并不友好,使用中文作为标签或者抬头会有乱码方框的问题:

error_Chinese

解决方案

方案一:设置中文字体

matplotlib提供了FontProperties对象,可以通过手工设置字体来格式化生成的展示图片。具体实现如下:

  • 找到中文字体文件

    • 在Mac下,可通过打开“字体册”应用找到对应的字体和字体所在的路径(默认为:/System/Library/Fonts/PingFang.ttc)
    • 在windows下,一般在C:\Windows\Fonts目录下。
    • 也可直接网上下载需要的字体
  • 配置字体属性

    1
    2
    from matplotlib.font_manager import FontProperties
    font = FontProperties(fname='/System/Library/Fonts/PingFang.ttc')
  • 引用字体属性

    1
    plt.title("中文测试", fontproperties=font)
  • 画图即可:

    Chinese_1

方案二: 使用第三方库

为解决中文画图的问题,强大的网友自己做了第三方支持中文库可以方便的展示中文,且支持 matplotlib 混合编程, 完全相同的API设计。

  • 安装pyployz

    1
    pip install pyplotz
  • 使用pyplotz和matplotlib混合配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import matplotlib.pyplot as plt

    plt.plot()
    # 新建pltz对象,用于显示中文
    from pyplotz.pyplotz import PyplotZ
    pltz = PyplotZ()
    pltz.enable_chinese()
    pltz.title('中文测试')
    plt.savefig('Chinese_1')
    plt.show()

效果如下:

Chinese_2

更多介绍可以参考官方说明:https://github.com/songlinhou/pyplotz

总结

两种方式都可以实现中文画图,方法一灵活性更好,但每行涉及到中文的地方都需要配置,方法二需要另外引入第三方包,并进行初始化,在首次使用时会自动下载中文字符集。

建议大家还是按需选用,如果有更好的方法,欢迎交流。