python制作等高线云图,matplot 画等高线图
matplot 除了可以畫比較簡單的圖之外,還可以類似于等高線這樣的圖。在機(jī)器學(xué)習(xí)里面可以用于可視化分類的效果,比如在可視化svm分類的時(shí)候,就可以這樣的方式去畫圖,在可視化上往往會有很好的效果。
代碼如下:import?matplotlib.pyplot?as?plt
import?numpy?as?npdef?f(x,y):
#?the?height?functions
return?2?*?x?+y
n?=?256#?將(-3,+3)?的這個(gè)區(qū)間分成256x?=?np.linspace(-3,?3,?n)??#?x?shape?(256,)y?=?np.linspace(-3,?3,?n)??#?y?shape?(256,)#?np.meshgrid?形成一個(gè)平面網(wǎng)格,#?X代表這個(gè)平面點(diǎn)的橫坐標(biāo),Y代表這個(gè)平面點(diǎn)的縱坐標(biāo)#?X?or?Y?shape?is?:?(256,?256)?#?這個(gè)函數(shù)的具體功能在下面講X,Y?=?np.meshgrid(x,?y)
#?接下來進(jìn)行顏色填充#?使用函數(shù)plt.contourf把顏色加進(jìn)去,位置參數(shù)分別為:X,?Y,?f(X,Y)。plt.contourf(X,?Y,?f(X,?Y))#?更多的參數(shù),可以畫出不同的風(fēng)格,alpha=.75?表示透明度?,?cmap=plt.cm.hot?表示f(X,Y)?的值對應(yīng)到color?map的暖色組中尋找對應(yīng)顏色#plt.contourf(X,?Y,?f(X,?Y),?8,?alpha=.75,?cmap=plt.cm.hot)plt.show()
結(jié)果如下圖:
image.png
如果要畫的點(diǎn)是離散的取值怎么辦?
for example,畫一個(gè)二維平面,上面的點(diǎn)的取值是離散的(比如說,0或1)。在機(jī)器學(xué)習(xí)經(jīng)常需要可視化這樣的東西,給一個(gè)平面,上面有很多點(diǎn),有的屬于正類,有的屬于負(fù)類,那么如果可視化?"""
畫一個(gè)二維平面,上面的點(diǎn)的取值是離散的(比如說,0或1),
比如說機(jī)器學(xué)習(xí)經(jīng)常需要可視化這樣的東西,給一個(gè)平面,上面有很多點(diǎn),有的屬于正類,有的屬于負(fù)類,那么如果可視化?
下面,是一個(gè)解決方案
"""import?matplotlib.pyplot?as?plt
import?numpy?as?np
n?=?10x?=?np.linspace(-3,?3,?n)
y?=?np.linspace(-3,?3,?n)
X,Y?=?np.meshgrid(x,?y)#?X,Y指的是一個(gè)?x?屬于[-3,3],y屬于[-3,3]的二維平面#?z表示的是在這個(gè)二維平面內(nèi)點(diǎn)的取值#?np.random.randint(0,2,X.shape)?指的是生成一個(gè)shape形狀的矩陣,里面的取值是0或1z=np.random.randint(0,2,X.shape)"""
rand?=?np.random.randint(0,2,(3,8))
print(rand)
[[1?1?0?0?1?0?1?0]
[0?1?0?1?0?1?0?0]
[0?0?1?0?0?1?0?0]]
"""plt.contourf(X,?Y,?z)
plt.show()
結(jié)果如下:
image.png
使用matplot畫圖的時(shí)候,常用的幾個(gè)numpy函數(shù):
np.meshgrid() 函數(shù)
一個(gè)簡單的示例代碼如下:x?=?np.arange(-2,2)
y?=?np.arange(?0,3)???#生成一位數(shù)組,其實(shí)也就是向量x
Out[31]:?array([-2,?-1,??0,??1])
y
Out[32]:?array([0,?1,?2])#將兩個(gè)一維數(shù)組變?yōu)槎S矩陣ret_x?,ret_y?=?np.meshgrid(x,y)
#?ret_x??可以理解為?x?縱向擴(kuò)展ret_x??Out[36]:
array([[-2,?-1,??0,??1],
[-2,?-1,??0,??1],
[-2,?-1,??0,??1]])#?ret_y?可以理解為?y?橫向擴(kuò)展ret_y?Out[37]:
array([[0,?0,?0,?0],
[1,?1,?1,?1],
[2,?2,?2,?2]])
如果我們想把 一個(gè)平面上面,x 屬于[-2,1],y屬于[0,2]的區(qū)域 里面的點(diǎn)畫出來。np.meshgrid()就可以提供這樣的功能。
它的返回值ret_x , ret_y 維度是相同的,分別表示了這個(gè)區(qū)域內(nèi)點(diǎn)的橫坐標(biāo)和縱坐標(biāo)。
np.c_ or np.r_ 函數(shù)
np.c_ or np.r_ 函數(shù)的作用是按行或者是按列合并向量import?numpy?as?np
a?=?np.array([1,2,3])
b?=?np.array([5,2,1])#?np.r_按row來組合array#?a,b?必須是向量print?(np.r_[a,b])#?輸出#?[1?2?3?5?2?1]#?np.c_按colunm來組合arrayprint?(np.c_[a,b])"""
#?輸出
[[1?5]
[2?2]
[3?1]]
"""
舉個(gè)例子:
svm 非線性核分類"""
一個(gè) 非線性svm分類器 的demo
"""import?numpy?as?npimport?matplotlib.pyplot?as?pltfrom?matplotlib?import?stylefrom?sklearn?import?svm#style.use("ggplot")#?構(gòu)造了一個(gè)非線性的數(shù)據(jù)X?=?np.array([[1,1],[5,5],[5,1],[1,5],[2.5,2.5],[2,3],[3,2],[2,2],[3,3]])
y?=?[1,1,1,1,0,0,0,0,0]
plt.scatter(X[:,?0],?X[:,?1],?c?=?y)#plt.show()#svc?=?svm.SVC(kernel='linear',C=1.0)?#?線性核#svc?=?svm.SVC(kernel='rbf',C=1.0,gamma=1)??#如果是非線性核 可以還不同的gamma值svc?=?svm.SVC(kernel='rbf',C=1.0,gamma='auto')
svc.fit(X,y)
h?=?0.01x_min,?x_max?=?X[:,?0].min()?-?1,?X[:,?0].max()?+?1y_min,?y_max?=?X[:,?1].min()?-?1,?X[:,?1].max()?+?1xx,?yy?=?np.meshgrid(np.arange(x_min,?x_max,?h),np.arange(y_min,?y_max,?h))
plt.subplot(1,?1,?1)
Z?=?svc.predict(np.c_[xx.ravel(),?yy.ravel()])
Z?=?Z.reshape(xx.shape)
plt.contourf(xx,?yy,?Z,?cmap=plt.cm.Paired,?alpha=0.8)
plt.scatter(X[:,?0],?X[:,?1],?c=y,?cmap=plt.cm.Paired)
plt.xlim(xx.min(),?xx.max())
plt.title("SVC?with?kernel?"+svc.kernel)
plt.show()
image.png
作者:愛秋刀魚的貓
鏈接:https://www.jianshu.com/p/0e11ecf0c0b6
總結(jié)
以上是生活随笔為你收集整理的python制作等高线云图,matplot 画等高线图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编程方法学26:介绍Java标准库
- 下一篇: 机器学习导论(张志华):基本概念