Day 19- R語言 基礎繪圖函數整理 Part 2
(前言:內個,我只是個剛接觸程式設計的小萌新,如果內文內容或程式碼寫的不對,還請各位大大指教 Orz)
昨天學習了莖葉圖、點圖及盒型圖,今天要繼續學習直方圖、常態機率分佈圖及等高線圖。
4. 直方圖 (Histogram)
直方圖可以展示連續資料的分佈。直方圖的x軸代表是值域的分組,y軸是該區間的資料筆數。直方圖的函數寫法為:hist(變數或向量名稱, 其他引數(請見documentation))
假設我們有一個data frame叫smolroundtea
,有三個列 (lib,lib2,lib3),各50筆資料,要繪製直方圖時可以用下列程式碼:
par(mfrow = c(2,1), mar = c(4,4,2,2)) #自訂繪圖輸出型式
lib <- sample(1:1000, 50, replace = FALSE) #三筆資料
lib2 <- sample(1:1000, 50, replace = FALSE)
lib3 <- sample(1:1000, 50, replace = FALSE)
smolroundtea <- data.frame(lib,lib2,lib3) #合併三筆資料成為data frame
hist(smolroundtea$lib, #指定繪圖對象
main = "Small Round Tea", #圖表名稱
axes = TRUE,
freq = FALSE, #freq若為FALSE,則y軸為密度(density)
plot = TRUE, #顯示圖表
label = TRUE) #標示資料
rug(jitter(smolroundtea$lib)) #繪製x軸的頻率圖,對應區間內數值出現頻率
lines(density(smolroundtea$lib), col = "red", lwd = 2) #繪製核密度曲線
hist(smolroundtea$lib,
main = "Small Round Tea",
axes = TRUE,
freq = TRUE, #freq為TRUE,y軸為頻率(frequency)
plot = TRUE,
label = TRUE)
rug(jitter(smolroundtea$lib))
輸出圖表如下:
我在x軸上面還另外加了頻率圖,這樣可以判讀有多少資料出現在同一個x軸區間中
5. 分位圖(quantile-quantile plot, QQ plot)
分位圖在統計學上是用來檢驗數據是否來自同一常態分佈來源的一個方法,R語言的qq圖函數總共有三種:qqnorm
, qqplot
及 qqline
qqnorm
的寫法為qqnorm(資料, 其他引數)
,以上面的smolroundtea為例,繪圖程式碼及結果如下:
par(mfrow = c(2,2))
qqnorm(smolroundtea$lib,
datax = FALSE)
qqnorm(smolroundtea$lib2,
datax = FALSE)
qqnorm(smolroundtea$lib3,
datax = FALSE)
可以看到,R匯出的預設圖表中,x軸代表理論分位數,y軸代表資料數值,如果要讓兩者反過來的話,把datax
設為FALSE
即可。
qqline
函數則是會把虛擬常態直線標示出來,qqline
函數寫法為:qqline(資料, 其他引數)
,詳細繪圖程式及繪圖結果如下:
par(mfrow = c(3,1), mar = c(4,4,2,2))
qqnorm(smolroundtea$lib)
qqline(smolroundtea$lib,#指定資料
qtype = 7) #指定分位計算方式,不連續資料填1-3,連續資料填4-9,每個數字有不同計算方式,請參考documentation
qqnorm(smolroundtea$lib2)
qqline(smolroundtea$lib2, qtype = 7)
qqnorm(smolroundtea$lib3)
qqline(smolroundtea$lib3, qtype = 7)
值得注意的是,qqline
必須與qqnorm
搭配才會畫出上面的圖。qqline
似乎無法單獨運作
最後登場的是qqplot
,qqplot
大致上與qqnorm
差不多,但是qqplot
是用來檢驗兩組資料是否來自同一常態分佈母體,或擁有近似的常態分佈母體。qqplot
函數的寫法為:qqplot(資料1, 資料2, 其他引數)
以上面的smolroundte為例,三組資料smolroundtea$lib vs. smolroundtea$lib2
, smolroundtea$lib vs. smolroundtea$lib3
及smolroundtea$lib2 vs. smolroundtea$lib3
的程式碼以及繪圖結果如下列:
qqplot(smolroundtea$lib, smolroundtea$lib2)
qqplot(smolroundtea$lib2, smolroundtea$lib3)
qqplot(smolroundtea$lib, smolroundtea$lib3)
{補充說明:如果要再更詳細檢查兩個資料的相關性,可以使用cor()
函數或者是cor.test()
函數進行檢查}
6. 等高線圖 (Contour plot)
等高線圖通常用來繪出一個區域的地理高度變化,用來繪製多變量微積分的圖也可以。在網路上搜尋一陣子後,我突然看到R官方documentation的等高線圖例題是畫類似多變量微積分的圖,所以我就拿了官方的例題,然後修改成(sin(x) * sin(y)) / (x * y)的公式。以下是程式碼及輸出結果:(等高線圖這個部分除了contour
函數可以繪製以外,還可以做其他類似等高線圖的圖,例如:persp
函數(繪製透視圖)及image
(繪製格網圖),以下程式碼也包含persp
及image
繪圖)
mulvar1 <- seq(-10, 10, length = 50)
mulvar2 <- seq(-10, 10, length = 50)
mulvar <- function(x, y) { #先給公式一個函數
(sin(x) * sin(y)) / (x * y)
}
z <- outer(mulvar1, mulvar2, mulvar) #用outer給mulvar1及mulvar2 統一套用mulvar函數
par(mfrow = c(2,2))
contour(mulvar1, mulvar2,z) #繪製等高線圖(左上)
persp(mulvar1, mulvar2,z, #繪製透視圖(右上)
theta = 60, phi = 25, #theta指定方位角、phi指定餘緯
expand = 0.5,
col = rainbow(10))
image(mulvar1, mulvar2,z, #繪製格網圖(左下)
col = hcl.colors(12, "YlOrRd", rev = TRUE),
xlab = "mulvar1",
ylab = "mulvar2")
參考資料: