第十章 第三方庫-Matplotlib-1
本章我們介紹幾種第三方庫,理解Python的強大功能。主要有NumPy、SciPy和 Matplotlib(繪圖庫),這些庫提供了一個強大的科學(xué)計算環(huán)境,有助于我們通過 Python 學(xué)習(xí)數(shù)據(jù)科學(xué)或者機器學(xué)習(xí)。
10.1 Matplotlib
Matplotlib庫由各種可視化類構(gòu)成,內(nèi)部結(jié)構(gòu)復(fù)雜,受Matlab啟發(fā)。matplotlib.pyplot是繪制各類可視化圖形的命令子庫,相當(dāng)于快捷方式。import matplotlib.pyplot as plt
Matplotlib是第一個Python可視化庫,繪制數(shù)據(jù)圖,有許多別的程序庫都是建立在其基礎(chǔ)上或者直接調(diào)用該庫,可以很方便地得到數(shù)據(jù)的大致信息,功能非常強大,但也非常復(fù)雜。
我們從簡單的開始。
?
1.plot函數(shù)實例
plt.plot(x, y,format_string,**kwargs)
format_string:控制曲線的格式字符串(可選),由顏色字符、風(fēng)格字符和標(biāo)記字符組成
x:x軸數(shù)據(jù),列表或數(shù)組,可選
y:y軸數(shù)據(jù),列表或數(shù)組
format_string:控制曲線的格式字符串
**kwargs: 第二組或更多的(x,y,format_string)
?
format_string:控制曲線的格式字符串,可選。由顏色字符、風(fēng)格字符和標(biāo)記字符組成

風(fēng)格字符????????說明
'-'????????????????????實線
'--'? ? ? ? ? ? ? ? 破折線
'-.'? ?????????????????點劃線
':'? ?????????????????虛線
' '? ?????????????????無線條

import numpy as np
import matplotlib.pyplot as plt
a=np.arange(10)
print(a)
plt.plot(a,a*2,a,a*3,a,a*4,a,a*5)??? #修改此行代碼
plt.show()
運行結(jié)果如下,輸出圖形為下圖左側(cè)。:
[0 1 2 3 4 5 6 7 8 9]

#修改此行代碼 ??位置替換為下述代碼,輸出圖形為上圖中間。
plt.plot(a,a*2,'r:D',a,a*3,'b-o',a,a*4,'m-.,',a,a*5,'r:x')
**kwargs: 第二組或更多(x,y,format_string)
color: 控制顏色 如color='green'
linestyle:線條控制 如linestyle='dashed'
marker:標(biāo)記風(fēng)格,marker='o'
markerfacecolor:標(biāo)記顏色,markerfacecolor='blue'
markersize:標(biāo)記尺寸,markersize=20
#修改此行代碼 ??位置替換為下述代碼,輸出圖形為上圖右側(cè)。
plt.plot(a,a*2,'r:D',a,a*3,'b-o',a,a*4,'m-.,',a,a*5,'r:x',markerfacecolor='yellow',markersize=10)
?
再看一個正弦曲線的例子:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 2 * np.pi, 0.01)
y = np.sin(x)
plt.plot(x,y,'r:D')
plt.show()

給圖加點名稱,坐標(biāo)軸提示信息如下綠色部分代碼,運行結(jié)果如上圖中間:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 2 * np.pi, 0.01)
y = np.sin(x)
plt.plot(x,y,'r:D')
plt.xlabel("x軸標(biāo)簽")
plt.ylabel("y軸標(biāo)簽")
plt.title("正弦曲線sin(x)")
plt.show()
?
中文沒能顯示出來,Why?...... 接著往下看吧!
2.pyplot的中文顯示
pyplot并不默認支持中文顯示,需要rcParams修改字體實現(xiàn)。兩種方式:全局設(shè)置中文字體和局部設(shè)置中文字體。上圖加上下面綠色部分代碼,繪制圖形為上圖右側(cè)部分,漢字顯示正常。
?
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family']='SimHei'???? # 'SimHei'是黑體
x = np.arange(0, 2 * np.pi, 0.01)
y = np.sin(x)
plt.plot(x,y,'r:D')
plt.xlabel("x軸標(biāo)簽")
plt.ylabel("y軸標(biāo)簽")
plt.title("正弦曲線sin(x)")
plt.show()
?
但是細心的你會發(fā)現(xiàn)怎么縱軸上的負號沒有顯示出來呢,百度一下,增加下面第一行綠色部分代碼即可,第二行綠色部分代碼是將圖形保存至文件,下圖左側(cè)就是從文件sinx.png中復(fù)制過來的圖像。
?
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['axes.unicode_minus']=False
plt.rcParams['font.family']='SimHei'
plt.rcParams['font.size']=16
x = np.arange(0, 2 * np.pi, 0.01)
y = np.sin(x)
plt.plot(x,y,'r:D')
plt.xlabel("x軸標(biāo)簽")
plt.ylabel("y軸標(biāo)簽")
plt.title("正弦曲線sin(x)")
plt.savefig('sinx',dpi=600)
plt.show()

下面我們來解釋一下rcParams。
rcParams的屬性
屬性????????????????????????說明
'font.family'????????????用于顯示字體的名字
'font.style'????????????????字體風(fēng)格,正常'normal'或斜體'italic'
'font.size'? ?????????????字體大小,整數(shù)字號或者'large','x-small'
中文字體的種類
rcParams['font.family']
中文字體????????????說明
'SimHei'????????????中文黑體
'Kaiti'? ?????????????????中文楷體
'LiSu'??????????????? ?中文隸書
'FangSong'? ? ? ? ? ? ? ? ?中文仿宋
'YouYuan'? ? ? ? ? ? ? ? ?中文幼圓
STSong? ? ? ? ? ? ? ? ?華文宋體
上面所有中文都按照統(tǒng)一的字體顯示,有時候這不是我們想要的結(jié)果。所以提供第二種方法為局部設(shè)置中文字體,在有中文輸出的地方,增加一個屬性:fontproperties,上圖右側(cè)為此種方式結(jié)果,代碼如下,綠色部分為修改行。
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['axes.unicode_minus']=False
x = np.arange(0, 2 * np.pi, 0.01)
y = np.sin(x)
plt.plot(x,y,'r:D')
plt.xlabel("x軸標(biāo)簽", fontproperties='SimHei',fontsize=16)
plt.ylabel("y軸標(biāo)簽", fontproperties='SimHei',fontsize=16)
plt.title("正弦曲線sin(x)", fontproperties='Kaiti',fontsize=20)
plt.savefig('sinx',dpi=600)
plt.show()
?
下面例子參考網(wǎng)絡(luò)資料,大家可以自己學(xué)習(xí),修改代碼,畫出自己的圖形。