Matplotlib是一個基於python的2D畫圖庫,可以用python腳本方便的畫出折線圖,直方圖,功率譜圖,散點圖等經常使用圖表,並且語法簡單。python
Python中經過matplotlib模塊的pyplot子庫來完成繪圖。Matplotlib可用於建立高質量的圖表和圖形,也能夠用於繪製和可視化結果。matplotlib是Python優秀的數據可視化第三方庫,matplotlb.pyplot是繪製種類可視化圖形的命令子庫,至關於快捷方式 import matplotlib.pyplot as plt.數組
一、線形圖dom
線性圖是最基本的圖表類型,經常使用於繪製連續的數據。經過繪製線形圖,能夠表現出數據的一種趨勢變化。函數
Matplotlib的plot(X,Y)用來繪製線形圖,在參數中傳入X和Y的座標便可。其中,X和Y軸座標的數據格式能夠是列表、數組和Series.工具
例1:座標數據格式爲series字體
import numpy as np import matplotlib.pyplot as plt import pandas as pd data={'name':['Tom','Peter','Lucy','Max'], 'sex':['female','female','male','male'], 'math':[78,79,83,92], 'city':['北京','上海','廣州','北京'] } df=pd.DataFrame(data) print(df) #DataFrame數據的行索引做爲X軸,math列索引做爲Y軸 plt.plot(df.index,df['math'],color='red',linestyle='-',linewidth=3,marker='D') #經過plot函數的color參數能夠指定線條的顏色
linestyle參數能夠指定線條的形狀,spa
linewidth參數可指定線條的寬度,code
marker參數可對座標點進行標記(默認狀況下,座標點是沒有標記的),orm
結果: name sex math city #建立一個DataFrame數據 0 Tom female 78 北京 1 Peter female 79 上海 2 Lucy male 83 廣州 3 Max male 92 北京 ,
注意: 顏色設置要放在線條和點的樣式的前面 ,顏色、線條和點的樣式能夠放置於格式字符串。對象
如:plt.plot(df.index,df[‘math’],‘co-’)
運行結果以下:
2. 柱狀圖
2.1 繪製柱狀圖主要是使用matplotlib的 bar函數 :
bar函數的color參數能夠設置柱狀圖的填充顏色,
alpha參數能夠設置透明度,
例如:
import matplotlib.pyplot as plt data=[23,85,72,43,52] plt.bar([1,2,3,4,5],data,color='royalblue',alpha=0.7)
運行結果:
bottom參數用於設置柱狀圖的高度,以此繪製堆積柱狀圖;
width參數 用於設置柱狀圖的寬度, 以此能夠繪製並列柱狀圖 。
grid函數用於繪製格網,經過對參數的個性化設置,能夠繪製出個性的格網
例如:
import numpy as np import matplotlib.pyplot as plt data1=[23,85,72,43,52] data2=[42,35,21,16,9] width=0.3 plt.bar(np.arange(len(data1)),data1,color='royalblue',alpha=0.7,width=width) plt.bar(np.arange(len(data2))+width,data2,color='green',alpha=0.7,width=width) plt.grid(color='black',linstyle='--',linewidth=3,axis='y',alpha=0.6)
運行結果:
Bar函數的經過barh函數能夠繪製水平柱狀圖
import numpy as np import matplotlib.pyplot as plt data1=[23,85,72,43,52] plt.barh(np.arange(len(data1)),data1,color='green',alpha=0.5)
如圖所示:
2.2 刻度與標籤:
現實中的柱狀圖的X軸是有刻度標籤的,上述實例中未設置。在matplotlib中,
經過 xticks函數 設置圖標的X軸的刻度和刻度標籤, yticks函數 設置y軸的刻度和標籤。
經過xlabel 和 ylabel 方法給X軸和Y軸添加標籤,
經過title方法爲圖表添加標題
例如:
import numpy as np import matplotlib.pyplot as plt data1=[23,85,72,43,52] labels=['A','B','C','D','E'] plt.xticks(range(len(data1)),labels) #設置刻度和標籤 plt.xlabel('Class') #plt.xlabel、ylabel、title方法分別給X軸和Y軸,圖標題添加標籤。 plt.ylabel('Amounts') plt.title('Example') #plt.bar(range(len(data1)),data) plt.bar(np.arange(len(data1)),data1,color='royalblue',alpha=0.7) plt.grid(color='black',linstyle='--',linewidth=3,axis='y',alpha=0.6)
運行結果:
圖例是標識圖表元素的重要工具, 在bar函數中傳入label參數表示圖例名稱,經過legend函數便可繪製出圖例。
data1=[23,85,72,43,52] data2=[42,35,21,16,9] width=0.3 plt.bar(np.arange(len(data1)),data1,width=width,label='one') plt.bar(np.arange(len(data2))+width,data2,width=width,label='two') plt.legend()
結果以下:
2.4 文本註解:
例如:在柱狀圖中加入文本數字,能夠很清楚的知道每一個類別的數量。經過text函數能夠在指定的座標(x,y)上加入文本註釋
data=[23,85,72,43,52] labels=['A','B','C','D','E'] plt.xticks(range(len(data)),labels) #設置刻度和標籤 plt.xlabel('Class') plt.ylabel('Amounts') plt.title('Example') plt.bar(range(len(data)),data) for x,y in zip(range(len(data)),data): plt.text(x,y,y,ha='center',va='bottom') #文本註解 # 第一個參數是x軸座標 # 第二個參數是y軸座標 # 第三個參數是要顯式的內容
3.散點圖:
Matpltlib中 scatter函數能夠用來繪製散點圖,傳入X和Y軸座標。Scatter(X,Y)
利用Numpy建立一組隨機數
import numpy as np import matplotlib.pyplot as plt X=np.random.randn(100) Y=np.random.randn(100) plt.scatter(X,Y,color='red',marker='D')
散點圖:
4. 直方圖
matplotlib的 hist()函數 用來繪製直方圖。
直方圖與條形圖的區別:
直方圖是用面積表示各頻數的多少,矩形的高度表示每一組的頻數或頻率,寬度則表示各組的組距,所以其寬度與高度均有意義;
條形圖(柱狀圖)是用條形的長度表示各種頻數的多少,其寬度是固定的。
因爲分組數據具備連續性,直方圖的各矩形一般是連續排列,而條形圖是分開排列;條形圖主要是用於展現分類數據,而直方圖則主要用於展現數據型數據。
x=np.random.normal(size=100) plt.hist(x,bins=30)
5. 自定義設置
Matplotlib的圖像位於Figure對象中,實際上就是建立了一個空的圖像窗口。可經過figure函數能夠建立一個新的Figure,用於繪製圖表
fig=plt.figure(figsize=(10,6)) #figsize參數能夠設置圖表(整個圖)的長寬比
ax1=fig.add_subplot(2,2,1) #不能經過空figure繪圖,必須用add_subplot()建立一個或者多個子subplot繪圖區才能繪圖
意思是:繪製2*2兩行兩列共4個子subplot圖像
ax2=fig.add_subplot(2,2,2) # 在建立Figure對象過程當中,經過add_subplot函數建立子圖,用於繪製圖形
ax3=fig.add_subplot(2,2,3)
years=[1950,1960,1970,1980,1990,2000,2010]
gdp=[300.2,543.3,1075.9,2862.5,5979.6,10289.7,14958.3]
ax1.scatter(years,gdp) #選用不一樣的ax變量,則能夠在對應的subplot子圖中繪圖(散點圖、線形圖、柱狀圖)
ax2.plot(years,gdp)
ax3.bar(years,gdp)
plt.subplots能夠輕鬆的建立子圖,而axes的索引類型相似於二維數組,這樣就能夠對指定的子圖進行繪製。Subplot函數中有3個參數:垂直繪圖的數量、水平繪圖的數量以及表示繪圖位置的索引(基於行進行計算)
fig,axes=plt.subplots(2,2,figsize=(10,6)) axes[1,0].plot(years,gdp) axes[0,0].scatter(years,gdp) axes[0,1].bar(years,gdp) axes[1,1].hist(years,gdp)
注意:當沒有設置figsize時,建立多子圖會顯得擁擠。經過 plt…subplot_adjust方法能夠設置子圖的間距修改子圖之間的間距(增長額外的空間以調整兩個子圖之間的距離)
subplots__adjust(left=None,bottom=None,right=None,top=None,wspace=None,hspace=None) ,其中前4個參數用於設置subplot子圖的外圍邊距,wspace和hapace參數設置用於設置subplot子圖間的邊距。
fig,axes=plt.subplots(2,2) #未設置figsize時,默認狀況下,各sudplot子圖間都會留有必定的間距。
years=[1950,1960,1970,1980,1990,2000,2010] gdp=[300.2,543.3,1075.9,2862.5,5979.6,10289.7,14958.3] fig,axes=plt.subplots(2,2) plt.subplots_adjust(wspace=0.3,hspace=0.3) axes[1,0].plot(years,gdp) axes[0,0].scatter(years,gdp) axes[0,1].bar(years,gdp) axes[1,1].hist(years,gdp)
6. 樣式與字體:
Matplotlib自帶了一些樣式供用戶使用,如 經常使用的ggplot樣式,經過 plt.style.use(‘ggplot’) 函數便可調用該樣式繪圖。 **
Matplotlib默認爲英文字體,若是繪製中出現漢字就會亂碼,所以須要指定matplotlib的默認字體,這樣就能夠解決亂碼的問題,
plt.rcParams[‘font.sans-serif’]=[‘simhei’] #指定默認字體
plt.rcParams[‘axes.unicode_minus’]=False #解決保存圖像時負號‘-’顯示爲方塊的問題