matplotlib學習筆記1-圖中顯示中文
阿新 • • 發佈:2018-12-29
相信很多初學者和我一樣,在利用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中圖例不能是中文的問題!