python數據分析入門——matplotlib的中文顯示問題&最小二乘法


    正在學習《用python做科學計算》,在練習最小二乘法時遇到matplotlib無法顯示中文的問題。查資料,感覺動態的加上幾條語句是最好,這里貼上全部的代碼。

# -*- coding: utf-8 -*-
"""
Created on Wed Aug 10 23:20:26 2016

@author: Administrator
"""

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


'''
針對matplotlib顯示中文的辦法
只需添加下面三行代碼
'''
import matplotlib as mpl
mpl.rcParams["font.sans-serif"] = ["Microsoft YaHei"]
mpl.rcParams['axes.unicode_minus'] = False

def func(x, p):
	'''
	數據擬合所需要的函數
	A*sin(2*K*np.pi*x + theta)
	'''
	A, k, theta = p
	return A*np.sin(2*k*np.pi*x + theta)

def residuals(p , y, x):
	'''
	實驗數據和擬合函數之差,p為擬合需要的參數
	'''
	return (y-func(x, p))
	
x = np.linspace(0, -2*np.pi, 100)
A, k, theta = 10, 0.34, np.pi/6  # 真實數據的函數參數
y0 = func(x, [A, k, theta])  # 真實數據
y1 = y0 + 2 * np.random.randn(len(x))  # 加入噪聲之后的數據

p0 = [7, 0.2, 0]  # 第一次猜測的函數擬合函數
# 調用leastsq進行數據擬合
# residuals為計算誤差的函數
# p0為擬合參數的初始值
# args為需要擬合的實驗數據
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()

  輸出結果:

   #########2016/10/11補更#############

  是這樣的,我在spyder環境下,用matplotlib作圖,嘗試上面的辦法,竟然不可以。。。額。那個。其實上面的方法換其他的編輯器都是可以的,pycharm和sublime親測可行。這里只是探索一下。

  在spyder下顯示是這樣的,標題和圖例都無法顯示中文。懵逼。。。當時查了好久資料也一直沒有解決,問題已經提問到stack overflow.

  不過呢,今天在這里又看到另一種方式,雖說圖例依然沒辦法顯示中文,但是把標題的中文問題解決了。通過matplotlib中指定字體方法。

  代碼如下:

import matplotlib.pyplot as plt
import scipy
import numpy as np
from pylab import *
myfont = matplotlib.font_manager.FontProperties(fname='C:/Windows/Fonts/msyh.ttf')
mpl.rcParams['axes.unicode_minus'] = False
x=np.linspace(0,2*np.pi,10)
y=np.sin(x)
xvals=np.linspace(0,2*np.pi,20)
yinterp = np.interp(xvals, x, y)
plot1=plt.plot(x, y, 'o')#采用unicode編碼
plot2=plt.plot(xvals, yinterp, '-x')
plt.xlabel(u'x軸',fontproperties=myfont)
plt.ylabel(u'y軸',fontproperties=myfont)
plt.title(u'插值',fontproperties=myfont)
plt.legend([u'真實值',u'插值'])
plt.show()

  結果如下:

  等我什么時候找到在spyder下面的完美解決方案再補充咯。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM