之前寫了很多關于Matplotlib的基礎知識,這次主要講一下Matplotlib所生成的幾個圖:散點圖,柱狀圖,等高線圖,圖片和3D數據
Scatter散點圖
在制作Scatter散點圖的過程中,我們首先要引入matplotlib.pyplot簡寫為plt,再引入模塊numpy用來產生一些隨機的數據。生成1024個呈正態分布的二維數組(平均數是0,方差是1)作為一個數據集,并圖像化這個數據集。其中,每一個點的顏色用T來表示:
import matplotlib.pyplot as plt import numpy as npn=1024 #數據大小 X=np.random.normal(0,1,n) #每一個點的X值 Y=np.random.normal(0,1,n) # T=np.arctan2(Y,X)
數據生成完畢之后,我們需要采用scatter來繪制這些點。在這里,我們輸入X和Y作為輸入點,顏色為T,color map用作默認值,透明度alpha為50%。X軸顯示范圍定位為(-1.5,1.5),并用xtick()函數來隱藏x坐標軸,ytick()函數來隱藏y坐標軸
plt.scatter(X,Y,s=75,c=T,alpha=.5)plt.xlim(-1.5,1.5) plt.xticks(()) plt.ylim(-1.5,1.5) plt.yticks(())plt.show()
python 筆記?綜上,該代碼最終產生的結果為:
柱狀圖
在我們平時的機器學習領域中,柱狀圖通常有很大的作用,它可以很形象的看到趨勢的變化。下面就介紹一下如何利用matplotlib來生成一個柱狀圖。
首先第一步便是生成數據。我們向上向下分別生成12個數據,X為0到11的整數,Y是相應的均勻分布的隨機數據。使用的函數是plt.bar,參數是X和Y:
import matplotlib.pyplot as plt import numpy as npn=12 X=np.arange(n) Y1=(1 - X / float(n)) * np.random.uniform(0.5,1.0,n) Y2=(1 - X / float(n)) * np.random.uniform(0.5,1.0,n)plt.bar(X,+Y1) plt.bar(X,-Y2) plt.xlim(-1,n) plt.xticks(()) plt.ylim(-1.25,1.25) plt.yticks(())plt.show()
python筆記全。?
這樣我們便可以生成柱狀圖的基本框架。下一步我們需要對該圖就顏色和數值進行優化。用facecolor設置主題顏色,edgecolor設置邊框顏色。
plt.bar(X,+Y1,facecolor='#9999ff',edgecolor='white') plt.bar(X,-Y2,facecolor='#ff9999',edgecolor='white')
?
接下來我們用函數plt.text分別在柱體上方(下方)加上數值,用%.2f 保留兩位小數,橫向居中對齊ha='center',縱向底部(頂部)對齊va='bottom'
for x,y in zip(X,Y1):plt.text(x+0.4,y+0.05,'%.2f' % y,ha='center',va='bottom')for x,y in zip(X,Y2):plt.text(x+0.4,-y-0.05,'%.2f' % y,ha='center',va='bottom')
?
matplotlib的方法。綜上,本部分的所有代碼為:
import matplotlib.pyplot as plt import numpy as npn=12 X=np.arange(n) Y1=(1 - X / float(n)) * np.random.uniform(0.5,1.0,n) Y2=(1 - X / float(n)) * np.random.uniform(0.5,1.0,n)plt.bar(X,+Y1,facecolor='#9999ff',edgecolor='white') plt.bar(X,-Y2,facecolor='#ff9999',edgecolor='white')for x,y in zip(X,Y1):plt.text(x+0.4,y+0.05,'%.2f' % y,ha='center',va='bottom')for x,y in zip(X,Y2):plt.text(x+0.4,-y-0.05,'%.2f' % y,ha='center',va='bottom')plt.xlim(-1,n) plt.xticks(()) plt.ylim(-1.25,1.25) plt.yticks(())plt.show()
?
所產生的結果為:
?
等高線圖
matplotlib中文手冊?在本部分,我們主要介紹如何利用matplotlib生成等高線。在生成等高線中,我們需要三維的數據點:(x,y)和對應的高度。在本程序中,高度我們用一個函數f()來生成。x,y分別是在區間[-3,3]中均勻分布的256個值,并用meshgrid在二維平面中將每一個x和每一個y分別對應起來,編織成柵格:
import matplotlib.pyplot as plt import numpy as npdef f(x,y):return (1 - x/2 + x**5 + y**3) * np.exp(-x**2,-y**2)n=256 x=np.linspace(-3,3,n) y=np.linspace(-3,3,n) X,Y=np.meshgrid(x,y)
?
接下來我們進行顏色填充。使用函數plt.contourf把顏色加進去,位置參數分別為:X,Y,f(X,Y)。透明度0.75,并將f(X,Y)的值對應到color map的暖色組中尋找對應顏色。
plt.contourf(X,Y,f(X,Y),8,alpha=0.75,cmap=plt.cm.hot)
?
接下來進行等高線繪制。使用plt.contour函數劃線。位置參數為?X,Y,f(X,Y)。在我們這里,我們將顏色選為黑色,線條寬度為0.5.現在的結果如下圖所示:只有顏色和線條,沒有數值Label
C=plt.contour(X,Y,f(X,Y),8,colors='black',linewidth=0.5)
Matplotlib、?
在上面的代碼中,我們可以看到,其中的8代表等高線的密集程度,這里被分為10個部分。如果是0,則圖像被一分為二。
再下一步,我們需要添加高度數字。我們加入Label,inline控制是否在Label畫在線里面,字體大小為10.并將坐標軸隱藏:
plt.clabel(C,inline=True,fontsize=10)
plt.xticks(())
plt.yticks(())
?
所以,在畫等高線的所有代碼為:
import matplotlib.pyplot as plt import numpy as npdef f(x,y):return (1 - x/2 + x**5 + y**3) * np.exp(-x**2,-y**2)n=256 x=np.linspace(-3,3,n) y=np.linspace(-3,3,n) X,Y=np.meshgrid(x,y)plt.contourf(X,Y,f(X,Y),8,alpha=0.75,cmap=plt.cm.hot) C=plt.contour(X,Y,f(X,Y),8,colors='black',linewidth=0.5)plt.clabel(C,inline=True,fontsize=10) plt.xticks(()) plt.yticks(()) plt.show()
如何打開matplotlib、?
所產生的結果為:
3D數據
在做機器學習的時候,有時候需要繪3D圖片來看數據整體的下降趨勢。首先在進行3D時除了導入matplotlib,還需要添加一個模塊,即3D坐標軸顯示,這個包不需要單獨安裝,python本身就自帶的
import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplot3d import Axes3D
matplotlib入門??
之后要定義一個圖像窗口,在窗口上添加3D坐標軸。
fig=plt.figure()
ax=Axes3D(fig)
?
接下來再給出X值和Y值,并將X值和Y值編織成柵格。每一個(X,Y)點對應的高度值,我們用下面這個函數進行計算:
X=np.arange(-4,4,0.25) Y=np.arange(-4,4,0.25) X,Y=np.meshgrid(X,Y) R=np.sqrt(X ** 2 + Y ** 2) Z=np.sin(R)
?
用pip安裝matplotlib?下一步我們需要做出一個三維曲面,并將一個colormap rainbow填充顏色,之后將三維圖像投影到XY平面做一個等高線圖。plot 3D 圖像:
ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap=plt.get_cmap('rainbow'))
?
其中,rstride 和 cstride分別代表row 和 column的跨度
之后,我們添加XY平面的等高線:
ax.contourf(X,Y,Z,zdir='z',offset=-2,cmap=plt.get_cmap('rainbow'))
?
matplotlib功能,如果zdir選擇了x,那么效果將會是對于XZ平面的投影。
因此,整個項目的代碼為:
import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplot3d import Axes3Dfig=plt.figure() ax=Axes3D(fig)X=np.arange(-4,4,0.25) Y=np.arange(-4,4,0.25) X,Y=np.meshgrid(X,Y) R=np.sqrt(X ** 2 + Y ** 2) Z=np.sin(R)ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap=plt.get_cmap('rainbow'))ax.contourf(X,Y,Z,zdir='z',offset=-2,cmap=plt.get_cmap('rainbow'))plt.show()
?
最終的效果圖為:
matplotlib坐標軸、?
本知識學自于:莫煩python
?