解決問題:matplotlib 生成的圖像中沒法顯示中文字符

matplotlib 生成的圖像中沒法顯示中文字符

開發環境

  • windows 8.1 64bit
  • python 3.6.0
  • matplotlib 3.2.1

問題背景

使用 matplotlib 繪製函數圖像的時候,發現設置圖像名稱或圖例須要漢字顯示的時候只能獲得 空格

生成圖像中的中文錯誤效果
matplotlib_chinese_error.pngpython

緣由分析

python中的matplotlib僅支持Unicode編碼,默認是不顯示中文的.

解決方案

解決方案1

python文件中添上一段語句
plt.rcParams['font.sans-serif']=['Simhei']

解決方案2

制定加載本地的字體文件
  1. 在python文件中導入matplotlib的字體控制方法windows

    from matplotlib.font_manager import FontProperties
  2. 另設font變量存儲設置好的屬性函數

    font = FontProperties(fname=r'C:\Windows\Fonts\simhei.ttf',size=14)
  3. 設置 title 內容時將 font的存儲對象賦給 fontproperties 屬性字體

    plt.title(u'y=x 與 y=x^0.5 的函數圖像比較',fontproperties = font)

    > 注意中文字符前必定要加 u``編碼

修改源碼後生成的圖像

matplotlib_chinese_right.png

附件

修改前的 python 文件

import numpy as np
 import matplotlib.pyplot as plt

 x = np.linspace(0,100) # 設置自變量的取值[0,100]

 y1 = x
 y2 = x**0.5

 plt.figure()
 plt.plot(x,y1,label='y=x')
 plt.plot(x,y2,label='y=x^0.5',color='red')

 plt.title('y=x 與 y=x^0.5 的函數圖像比較')

 plt.legend()
 plt.show()

經解決方案1修改後的源碼

import numpy as np
 import matplotlib.pyplot as plt

 x = np.linspace(0,100) # 設置自變量的取值[0,100]

 y1 = x
 y2 = x**0.5

 plt.figure()
 plt.plot(x,y1,label='y=x')
 plt.plot(x,y2,label='y=x^0.5',color='red')

 plt.title('y=x 與 y=x^0.5 的函數圖像比較')
 plt.rcParams['font.sans-serif']=['Simhei']

 plt.legend()
 plt.show()

經解決方案2修改後的源碼

import numpy as np
 from matplotlib.font_manager import FontProperties
 import matplotlib.pyplot as plt

 x = np.linspace(0,100) # 設置自變量的取值[0,100]
 y1 = x
 y2 = x**0.5

 plt.figure()
 plt.plot(x,y1,label='y=x')
 plt.plot(x,y2,label='y=x^0.5',color='red')
 font = FontProperties(fname=r'C:\Windows\Fonts\simhei.ttf',size=14)

 plt.title(u'y=x 與 y=x^0.5 的函數圖像比較',fontproperties = font)

 plt.legend()
 plt.show()
相關文章
相關標籤/搜索