matplotlib中文亂碼的兩種解決方案

閱讀本文大概須要 7 分鐘  "




前言html


最近在搞數據可視化的一些案例,特意來把學習過程當中遇到的一些小問題記錄一下。

今天遇到一個問題就是:當我給座標軸添加一些中文內容以便客戶查看時,出現了亂碼,接下來我就經過兩種方法對亂碼的問題作一下解釋。


中文亂碼的解決方案



01 - 出錯緣由web


咱們先來看一段簡單的演示代碼:


import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0.05,10,1000)
y = np.cos(x)
plt.plot(x,y,ls="-",lw=2,label = "plot figure")
plt.legend()
plt.xlabel("這是x軸")
plt.ylabel("這是y軸")
plt.show()


代碼很簡單,這裏再也不贅述,咱們直接看效果:



咱們發現,除了大大的報紅信息以外,對於座標軸的中文解釋內容也出現了亂碼現象。ok,找出了問題,接下來咱們就來看看解決辦法。



02 - 經過代碼解決微信


首先,第一種方法,在每次寫代碼以前,咱們加入以下兩行代碼:
app


plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標籤
plt.rcParams['axes.unicode_minus'] = False #用來正常顯示負號


加入這兩行代碼以後咱們發現,所得結果仍然還有亂碼現象,這裏說一下,我在不少書中的演示代碼也看到,做者只是添加了這兩行代碼,這並無結束,咱們在輸入中文字符的時候,還應該在中文字符前加上 u ,即正確格式爲:u'內容'
dom


咱們來看完整的代碼:編輯器


# -*- coding: utf-8 -*-
"""
@author: 石璞東(微信公衆號:hahaCoder)
@software: PyCharm
@file: 01.py
@time: 2020/8/16 12:24 上午
"""

import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標籤
plt.rcParams['axes.unicode_minus'] = False #用來正常顯示負號

x = np.linspace(0.05,10,1000)
y = np.random.randn(1000)

plt.plot(x,y,label="scatter figure")
plt.legend()

plt.xlabel(u"這是x軸")
plt.ylabel(u"這是y軸")

plt.show()


咱們再來看效果展現:
學習



哈哈哈,亂碼問題被解決咯,不過細心的小夥伴會發現,每次寫代碼,都要把這兩行代碼加進去,並且還要在中文內容前加 u ,這可太麻煩了,因此我給小夥伴們介紹了第二種一勞永逸的方法,快來看看吧~字體



03 - 修改配置文件,一勞永逸的方法flex


1. 首先,咱們下載SimHei字體(即SimHei.tff包),小夥伴們可在官網下載,也可在我推薦的以下地址去下載:
http://www.xiazaiziti.com/210356.html


2. 下載好以後,咱們找到matplotlib文件夾,以下圖所示:



若是找不到matplotlib文件夾的小夥伴,可經過以下代碼進行查看:


import matplotlib
print(matplotlib.get_data_path()) # 數據路徑


咱們重點關注matplotlib中的ttf文件夾matplotlibrc文檔

第一步,咱們將下載好的SimHei.ttf文件拷貝到ttf文件夾

第二步,咱們打開matplotlibrc文檔,按照以下提示進行修改:





總結一下,共須要修改三條配置命令:


font.family:sans-serif
font.sans-serif:SimHei, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
axes.unicode_minus:False#做用就是解決負號'-'顯示爲方塊的問題


提醒小夥伴一點,不要忘記去掉上述所修改三條配置命令前的 # 符號。


3. 修改完成配置文件以後,距離成功就差一步咯,咱們如今只須要將咱們剛剛拷貝的字體和設置的命令從新加載一下便可,咱們能夠經過以下命令進行設置:


from matplotlib.font_manager import _rebuild
_rebuild() #reload一下


設置完成以後,咱們無需引入其餘代碼,也無需在中文內容前加 u ,就能夠正常顯示中文內容啦,完整代碼以下:


# -*- coding: utf-8 -*-
"""
@author: 石璞東(微信公衆號:hahaCoder)
@software: PyCharm
@file: 01.py
@time: 2020/8/16 12:24 上午
"""

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0.05,10,1000)
y = np.random.randn(1000)

plt.plot(x,y,label="scatter figure")
plt.legend()

plt.xlabel(u"這是x軸")
plt.ylabel(u"這是y軸")

plt.show()

 

本文最後


在上述內容中,我介紹了兩種解決matplotlib項目中可能遇到的中文亂碼的問題,小夥伴們學會了嗎?快去實踐一下吧~

本文分享自微信公衆號 - hahaCoder(hahaCoder)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。ui

相關文章
相關標籤/搜索