2020年2月6日 星期四

R 語言下的等高線圖

在觀看 Andrew Ng 課程的時候,看到了以 Contour Plot 說明梯度下降的過程
因此想要研究一下等高線圖的畫法

資料準備

volcano 資料一份
R datasets 的一員
是一座 名為 Maunga Whau 火山 的地形資料
以 87 * 61 的矩陣方式儲存
data("volcano")
class(volcano)
## [1] "matrix"
dim(volcano)
## [1] 87 61
從曲面開始
比較直觀的理解是類似於地形的概念,表達每個區塊不同的高度
x <- 10 * (1:nrow(volcano))
y <- 10 * (1:ncol(volcano))
z <-volcano
persp(x,y,z,theta = 26, phi =18, expand = 0.5,col=terrain.colors(dim(volcano)[1]^2))

從這個曲面可以發現他將 矩陣的行列分別當成x軸和y軸,將矩陣中的元素對應到高度成為z軸,畫出立體圖形
如果把矩陣弄小一點,就會變成像這樣的感覺
當然這次的目的並不是要畫曲面
只是先了解一下 x y z 都放些什麼東西 接下來將同樣的資料放到 contour( )
contour(x,y,z)

這就是等高線圖(Contour Plot)了
每一個圈代表一個相等的高度
線越是密集代表這個區域越是陡峭
等高線圖的另一個用法,就是用來表現雙變數函數的圖形
\[z= f(x,y)=4x^2 + 2y^2 -9\]
x <- seq(-10,10,1)
y <- seq(-5,5,.1)
z<-outer(x,y,FUN = function(x,y)return(4*x^2 + y^2 -9))

contour(x,y,z,nlevels = 20, asp=1)

\[f(x,y) = \frac{-3 y }{x^2 + y^2 + 1}\]
x <- seq(-10,10,.1)
y <- seq(-5,5,.1)
z<-outer(x,y,FUN = function(x,y)return((-3 *y) / (x^2 + y^2 + 1)))
contour(x,y,z,nlev = 25,asp=1)

同時也更容易理解函數在三維空間的圖形
x <- seq(-10,10,1)
y <- seq(-5,5,.5)
z<-outer(x,y,FUN = function(x,y)return((-3 *y) / (x^2 + y^2 + 1)))
persp(x,y,z,theta=50,phi = 10,col='skyblue')

也有很多不同的表示方式
par(mfrow = c(2,2))
x <- 10 * (1:nrow(volcano))
y <- 10 * (1:ncol(volcano))
z <-volcano
plot(volcano[35,],main="plot(volcano)")
image(volcano,main="image(volcano)")
contour(volcano,main="contour(volcano)")

filled.contour(x, y, volcano, color = terrain.colors,main="filled.contour(volcano)")

沒有留言:

張貼留言

使用LibreOffice製作代碼瀑布

Matrix_Digital_Rain_in_Excel_1 Matrix Digital Rain in LibreOffice 之前在facebook 看到一個沒有見過的效果,一時興起就研究了一下 如何使用LibreOffie...