1. 程式人生 > >matplotlib學習筆記1-圖中顯示中文

matplotlib學習筆記1-圖中顯示中文

相信很多初學者和我一樣,在利用matplotlib庫畫圖的時候遇到過圖例不能顯示中文的問題。經過仔細探索(百度+谷歌),現分享一種簡單便捷一勞永逸的方法。

  • 一般畫圖是不能顯示中文圖例的:
import numpy as np
from scipy.optimize import leastsq
import pylab as pl
import matplotlib

def func(x,p):
    a,k,theta = p
    return a*np.sin(2*np.pi*k*x+theta)

def residuals(p,y,x):
    return y - func(x,p)

x = np.linspace(0
,-2*np.pi,100) a = 10 k = 0.34 theta = np.pi/6 y0 = func(x,[a,k,theta]) y1 = y0 + 2*np.random.randn(len(x)) p0 = [7,0.2,0] plsq = leastsq(residuals,p0,args=(y1,x)) print('真實的引數',[a,k,theta]) print('擬合引數',plsq[0]) pl.plot(x,y0,label = '真實資料') pl.plot(x,y1,label = '帶噪聲的實驗資料') pl.plot(x,func(x,plsq[0]),label = '擬合數據'
) pl.legend() pl.show()

執行之後,圖例不能正常顯示,只是幾個框框。
這裡寫圖片描述

  • 解決方法:
#在前面加上下面三行:
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

程式碼變成:

import numpy as np
from scipy.optimize import leastsq
import pylab as pl
import matplotlib

from pylab import
* mpl.rcParams['font.sans-serif'] = ['SimHei'] mpl.rcParams['axes.unicode_minus'] = False** def func(x,p): a,k,theta = p return a*np.sin(2*np.pi*k*x+theta) def residuals(p,y,x): return y - func(x,p) x = np.linspace(0,-2*np.pi,100) a = 10 k = 0.34 theta = np.pi/6 y0 = func(x,[a,k,theta]) y1 = y0 + 2*np.random.randn(len(x)) p0 = [7,0.2,0] plsq = leastsq(residuals,p0,args=(y1,x)) print('真實的引數',[a,k,theta]) print('擬合引數',plsq[0]) pl.plot(x,y0,label = '真實資料') pl.plot(x,y1,label = '帶噪聲的實驗資料') pl.plot(x,func(x,plsq[0]),label = '擬合數據') pl.legend() pl.show()

執行該程式碼:
這裡寫圖片描述

這樣就輕鬆的解決了matplotlib中圖例不能是中文的問題!