R 繪 圖 功 能
統計繪圖 類別資料: bar chart, pie chart 2 類別資料: bar chart, pie chart 連續資料: stem-and-leaf plot, histogram, box plot, scatter plot,…
統計圖形(Stem-and-Leaf) Author: John W. Tukey. References: Tukey (1977) and Velleman and Hoaglin(1981). 用途與特性:莖葉圖主要是用來描述資料分佈的型態,和直方圖具有一樣的性質,但卻比直方圖多了「保留原始資料」(keep the original data)的特性。 作法: 決定stem(樹幹、主幹)的數值:可想像是直方圖的組距(如:95,stem記為9;若資料數值為985,stem記為98)。 決定leaf(樹葉):通常都是數值資料的最後一個位數;定好後將資料每一筆值依序填入莖葉圖的表中(如:95,leaf記為5;若資料數值為985,leaf記為5)。 計算各組次數(frequency):填完後記錄各組的個數。
統計圖形(Stem-and-Leaf) 優點1:可呈現實際的觀測值。 優點2:可以由此得知資料的排序(order),而有序統計量(order statistics)對於統計分析與推論上,是有很大的幫助。此外,知道資料的排序,就可得知各個資料所屬的樣本百分比(sample percentiles)。 延伸圖形1:Ordered stem-and-leaf display: 將原先的莖葉圖,在樹葉部分的數值加以排序。 延伸圖形2:將原先的stem組距縮短,用符號(如:*O)表示。要注意的是:資料分的組數太多,圖型會比較不平滑,可能大部分的組只有少少的觀測值,但若組數太少,所有資料又會集中在某一組;這兩種情況,都比較無法看出資料集中或是分散的趨勢。 缺點:適合數據較少的資料。 R 指令: > stem(變數名稱)
統計圖形(Stem-and-Leaf) 莖葉圖(Stem-and-Leaf)
Practice 6 畫出data2中,身高的莖葉圖
統計圖形(Box plot) 用途與特性:固定資料的尺度位置,利用樣本產生之統計量(最小值minimum、第一四分位數first quartile、中位數median、第三四分位數third quartile、最大值maximum)來描繪資料的分佈。主要是利用資料尺度固定的特性,用統計量所在的位置來比較兩組以上資料分佈及差異,並察看資料的離散程度,圖形所呈現的訊息比莖葉圖或直方圖少。 作法: 確定資料的尺度。 求資料之最小值minimum(min)、第一四分位數first quartile(Q1)、中位數median(Q2)、第三四分位數third quartile(Q3)、最大值maximum(max)。 第一四分位數first quartile、第三四分位數third quartile分別代表箱子的兩端,中位數median所在的位置畫一條線,將箱子切為兩半 從第一四分位數的位置畫一條線,延伸至最小值;從第三四分位數的位置畫一條線,延伸至最大值。
統計圖形(Box plot) 其他: R指令: > boxplot(變數名稱1) Interquartile range四分位距(IQR):IQR=Q3-Q1 第三與第一四分位數的差距;即箱子的總長度。 Outlier 離群值:也可稱為極端值,若一組資料有極端值的存在,將會影響資料分佈的型態,對於某些統計量(如:平均數)也會有很大的影響。 Tukey利用IQR來判別資料是否具有離群值,他訂立了幾個衡量的量與標準(Ch6.1 p.330-331): Inner fence(內部柵欄):距離Q1及Q3 一點五倍IQR的位置。 Outer fence(外部柵欄):距離Q1及Q3 三倍IQR的位置。 Suspected outliers:落在inner fence與outer fence之間的資料為疑似離群值。 Outliers: 落在outer fence 之外的資料為離群值。 R指令: > boxplot(變數名稱1)
盒鬚圖 (box plot) Elements of a Box Plot * o Q1 Q3 Inner Fence Outer Median Q1 Q3 Inner Fence Outer Interquartile Range Smallest data point not below inner fence Largest data point not exceeding inner fence Suspected outlier Outlier Q1-3(IQR) Q1-1.5(IQR) Q3+1.5(IQR) Q3+3(IQR) 9
盒鬚圖 (box plot) 10 boxplot(high) boxplot(c(high,200))
Practice 11 畫出data2中,體重的盒鬚圖
分割資料繪圖 男女身高的分佈可能不同,想要將男女分開畫圖 boxplot(split(high,sex)) 12 男女身高的分佈可能不同,想要將男女分開畫圖 boxplot(split(high,sex)) boxplot(high~sex) Split
Practice 13 依照性別,畫出data2中,體重的盒鬚圖
盒鬚圖 (box plot) 14 boxplot(high,horizontal=T) 畫成水平的盒鬚圖
盒鬚圖 (box plot) 15 boxplot(split(high,sex), col=c(3,4), xlab=“gender”, ylab=“high”, main="Box plot") 給男女不同的顏色 X座標的名稱 y座標的名稱 圖形的標題
盒鬚圖 (box plot) boxplot(split(high,sex),col=c("red","yellow"), 16 boxplot(split(high,sex),col=c("red","yellow"), xlab="gender", ylab="high", main="Box plot") 除了數字之外,也可以用文字表示
Practice 17 依照性別,畫出data2中,體重的盒鬚圖,命名x軸為sex,y軸為weight,並用不同顏色分別男女。將此圖命名為“Box plot of weight”。
將圖片存檔 18 指令: savePlot("欲儲存檔案名稱", type = c("wmf", "emf", "png", "jpeg", "jpg", "bmp", "ps", "eps", "pdf", …) 或者
統計圖形 盒鬚圖(Box plot) > par(mfrow=c(2,2)) > boxplot(data$wt) #繪製weight變項的box plot > boxplot(data$wt, horizontal=T,ylab="weight",main="Horizontal Box Plot") # horizontal=T表示畫成水平的盒子圖;main, xlab, ylab後面接的字串 分別代表圖形的標題、x座標、y座標的名稱,col為圖形顏色的指令 > boxplot(split(data$wt,data$sex),col=c(3,4),xlab="sex" ,ylab="weight") #依照性別畫圖,並圖上顏色 > boxplot(data$wt~data$sex,col=c(“red”,“yellow”),xlab=“sex” ,ylab=“weight”) #另一種依照類別(性別)畫圖的表示法 #split函數的第二個變數,或是~後面接的變數,皆是代表要依此分群分類的資料
統計圖形(Box plot)
Practice 請畫出資料“airquality”中,“Temp”的盒鬚圖。 21 請畫出資料“airquality”中,“Temp”的盒鬚圖。 請根據不同月份,畫出資料“airquality”中,“Temp”的盒鬚圖。(用不同顏色代表不同月份,X軸名稱為“Month”,Y軸名稱為“Temperature”) 請說明盒鬚圖的結果
統計圖形 散佈圖(Scatter plot) 用途與特性:描述兩個變數、或兩組資料之間的關係或趨勢。 指令:
散佈圖 (Scatter plot) 23 plot(weight,high)
統計圖形(Scatter plot matrix) 當資料有三個變數以上,可以將資料中兩兩變數之間的關係,用散佈圖矩陣呈現。 指令: >pairs(資料檔名稱) 以鳶尾花為例 > data(iris) > pairs(iris)
散佈圖 (Scatter plot) 26 plot(data1) 將data1中的所有變數,兩兩配對畫出來
Practice 27 請將Surgical的資料讀入R 看看共有幾個人的資料,每個人的資料收集了幾個變數 請畫出clot與prog的散佈圖
散佈圖中可以設定的參數(Scatter plot) 指令 說明 main= 加入主要標題 sub= 加入下標題(放在圖最底下) xlab= ylab= 宣告X軸(Y軸)的變數 xlim= ylim= 界定X軸(Y軸)的上界及下界 ex: xlim=c(1,10)
散佈圖中可以設定的參數(Scatter plot) 指令 說明 type= 說明圖形的種類。“p”: 描點,“l”:畫線,“b”:同時描點及畫線,“o”:和“b”相同,但線會蓋過點,“h”:點的座標用垂直的線表示,“s”:stairstep plot,“n”:只有座標軸 lty= 標明線的種類。 1: solid,2:dashed,3:dotted,4:dotdash,5:longdash,6:twodash pch= 設定點的形式,共有25種內設的形式(1~25)。 另外,也可以自行輸入想要的形式,如: “*”。 col= 設定顏色,可以寫顏色的英文名稱或數字 bg= 設定圖的背景顏色
圖形的種類(type=) plot(data2$weight,data2$high,type="p",main="type='p'") 30 plot(data2$weight,data2$high,type="p",main="type='p'") plot(data2$weight,data2$high,type="l",main="type='l'") plot(data2$weight,data2$high,type="b",main="type='b'") plot(data2$weight,data2$high,type="o",main="type='o'") plot(data2$weight,data2$high,type="h",main="type='h'") plot(data2$weight,data2$high,type="s",main="type='s'")
31
標明線的種類 (lty=) 32 plot(data2$weight,data2$high,type="l",lty=1,main="lty=1") plot(data2$weight,data2$high,type="l",lty=2,main="lty=2") plot(data2$weight,data2$high,type="l",lty=3,main="lty=3") plot(data2$weight,data2$high,type="l",lty=4,main="lty=4") plot(data2$weight,data2$high,type="l",lty=5,main="lty=5") plot(data2$weight,data2$high,type="l",lty=6,main="lty=6")
33
only available on graphsheet 設定點的型式(pch=) 34 可選擇的型式 plot(data2$weight,data2$high,pch=1,main="pch=1") plot(data2$weight,data2$high,pch=2,main="pch=2") plot(data2$weight,data2$high,pch=3,main="pch=3") plot(data2$weight,data2$high,pch="%",main="pch='%'") plot(data2$weight,data2$high,pch="*",main="pch='*'") plot(data2$weight,data2$high,pch="@",main="pch='@'") only available on graphsheet
35
Color 36
Practice 37 在Surgical資料中,用三種不同的點畫出clot與prog的散佈圖
將兩變數畫在同一張圖上(Scatter plot) 若想將兩個變數畫在同一張圖上 指令 說明 points 將另一個變數的點加在圖上 lines 將資料用線連起來加在圖上 abline abline(a,b):加一條斜率為b,截距為a的直線 abline(h=y):加一條Y=y的水平線 abline(v=x):加一條X=x的水平線 legend 加入說明,用來表示圖中線或點代表的變數 title 加入標題
Example 1 將data1中high與weight依男女分別畫在同一張圖上 39 將data1中high與weight依男女分別畫在同一張圖上 因為男生的身高介於157~182,體重介於54~94,先畫男生的身高-體重散佈圖,X與Y的範圍會被男生的資料決定(女生身高介於149~175,體重介於41~46)
Example 1 40 plot(high_sex$"M",weight_sex$"M",xlim=c(140,190),ylim=c(40,100),pch=3,col=3) points(high_sex$"F",weight_sex$"F",pch=4,col=6) plot(high_sex$"M",weight_sex$"M",xlim=range(high),ylim=range(weight),pch=3,col=3) points(high_sex$"F",weight_sex$"F",pch=4,col=6)
加入註解 41 legend(X的頂點, Y的頂點, legend=c(欲加入的註解), pch=c(使用的點的型式), col=c(使用的顏色), lty=c(使用的線的種類) ) Ex: legend(150,95,legend=c("Male","Female"),pch=c(3,4),col=c(3,6))
Example 1 42 (150,95) 可以很明顯看出來,女生比男生輕、身高較不高 Q: 有線性關係嗎?
Example 2 若已知身高與體重的關係為weight=-113.5+1.05high,將這一條迴歸線加在圖中 abline(截距,斜率) 43 若已知身高與體重的關係為weight=-113.5+1.05high,將這一條迴歸線加在圖中 abline(截距,斜率) abline(-113.5,1.05,col="purple")
Example 2 44
Practice 45 在Surgical資料中,依男女畫出clot與prog的散佈圖(gender=0: male; gender=1: gemale),男女請用不同顏色及標示,並加入註解標明男女。 假設clot與prog的關係為porg=57.75+0.95clot,請將此迴歸線標示於圖上
Example 3 資料TemperatureMonth記錄台灣26區域,一月到十二月的平均溫度 46 資料TemperatureMonth記錄台灣26區域,一月到十二月的平均溫度 將A、B、C三地的每月平均溫度畫在同一張圖上
Practice 47 將D、E、F三地的每月平均溫度畫在同一張圖上 用不同顏色及線條標明D、E、F三地,並加註解
統計圖形(Scatter plot)
統計圖形(Scatter plot)
統計圖形(Histogram) Author: William Playfair (1759-1823) 為數據圖學的先驅。 用途與特性:描述資料的分佈。 作法:決定組距(continuous data)或是類別數(categorical/ discrete data),計算各組的個數,直方圖的寬度為資料的組距;高度即各組的個數、或所佔的百分比。 R指令: hist(變數名稱, …)
hist() 51 hist(x, breaks="Sturges", freq = NULL, col = NULL, main = paste("Histogram of" , xname), xlim = range(breaks), ylim = NULL, xlab = xname, …) breaks: 設定組距 自行設定: c(…) 利用seq(…) 設定分組的組數( nclass) freq: 畫次數(T)或是相對頻率(F) xlim: X軸取值的範圍
直方圖 (Histogram ) hist(high) hist(high,breaks=c(140,155,165,170,190)) 52 hist(high) 自動給定組距 hist(high,breaks=c(140,155,165,170,190))
直方圖 (Histogram ) hist(high,breaks=seq(140,190,10)) hist(high,nclass=8) 53 hist(high,breaks=seq(140,190,10)) hist(high,nclass=8)
直方圖 (Histogram ) hist(high,freq=F) 54 hist(high)
統計圖形(Bar plot) 用途與特性:描述資料的分佈(特別是類別資料)。 作法:寬度相同,長度和已知次數成比例的長方形顯示數據的統計圖。 指令 > barplot(變數名稱) Ex: > barplot(VADeaths) > barplot(VADeaths, legend = rownames(VADeaths)) > title(main = list("Death Rates in Virginia", font = 4))
Random generation from distribution Normal distribution rnorm(n, mean=0, sd=1) Chi-square distribution rchisq(n, df , ncp=0) Student t distribution rt(n, df) F distribution rf(n, df1, df2) Binomial distribution rbinom(n, size, prob) Poisson distribution rpois(n, lambda) Uniform distribution runif(n, min=0, max=1)
Random generation from distribution
機率分佈相關的指令 Normal distribution 常態分佈 dnorm(x, mean=0, sd=1) x值所對應的密度 pnorm(q, mean=0, sd=1) q值所對應的累積機率 qnorm(p, mean=0, sd=1) 累積機率值為p所對應的數值 rnorm(n, mean=0, sd=1) 利用常態分佈產生n個隨機亂數
繪製機率密度函數圖 x=c(-250:250)/50 a=dnorm(x, mean = 0, sd = 1) #===Normal Probability distribution===# x=c(-250:250)/50 a=dnorm(x, mean = 0, sd = 1) b=dnorm(x, mean = 0, sd = 2^0.5) c=dnorm(x, mean = 0, sd = 0.5^(0.5)) dd=dnorm(x, mean = 2, sd = 1) plot(x,c,pch="+") points(x,b,pch="-",col="blue") points(x,a,col="red",pch="*") points(x,dd,pch="^",col="Green") legend(-5,0.55, legend=c("mean=0 var=1","mean=0 var=2","mean=0 var=0.5", "mean=2 var=1"),pch=c("*","-","+","^"), col=c("red","blue","black","Green"))
另一種繪製機率密度函數圖的方法 x=c(-250:250)/50 matplot(x, outer(x, c(0.5,1,2),function(x,sd)dnorm(x,0,sd)), lty=1:3, type=c("l","l","l"), ylab="", col=c("black","red","blue")) matlines(x, outer(x, c(-1,2),function(x,mu)dnorm(x,mu,1)), lty=4:5, type=c("l","l","l"), ylab="", col=c("green","purple")) legend(1.5,0.8,c("N(0,0.5)","N(0,1)","N(0,2)","N(-1,1)","N(-2,1)"), lty=1:5,col=c("black","red","blue","green","purple") )
另一種繪製機率密度函數圖的方法 matplot: 將矩陣(x, y)依據行的資料,畫成圖形。 指令:matplot(x, y, 其餘圖形的設定指令);在此y是利用outer指令產生。 outer: 利用函數function產生一個矩陣,亦即生成(x, y)> 指令:outer(x, y, function) function: 自訂函數。 指令:function(自訂變數名稱) 表示式或公式。 matlines: 增加不同圖形於matplot上面。 matpoints: 同上。
Example of matplot table(iris$Species) # is data.frame with 'Species' factor iS <- iris$Species == “setosa” #邏輯變數 iV <- iris$Species == "versicolor" #邏輯變數 op <- par(bg = “bisque”) #背景是燒陶的顏色 matplot(c(1, 8), c(0, 4.5), type= "n", xlab = "Length", ylab = "Width", main = “Petal and Sepal Dimensions in Iris Blossoms”) #type=“n”表示座標軸 matpoints(iris[iS,c(1,3)], iris[iS,c(2,4)], pch = c("s", "S"), col = c(2,4)) matpoints(iris[iV,c(1,3)], iris[iV,c(2,4)], pch = ("v","V"), col = c(2,4)) legend(1, 4, c("Setosa Petals", " Setosa Sepals", "Versicolor Petals", "Versicolor Sepals"), pch = "sSvV", col = rep(c(2,4), 2))
繪製機率密度函數圖 繪製Beta分佈機率密度函數圖形 將Beta(1,1), Beta(1,2), Beta(1, 0.5), Beta(3,2), Beta(4,4), Beta(0.5,0.25) 繪製在同一張圖上
統計圖形 圖形控制 說明 例子 高階繪圖函數 自動生成新的座標軸 plot() hist() 低階繪圖函數 增加點或線至原有的圖上 points() abline() 繪圖參數 控制一頁圖的所有細節 par(mfrow=c(2,1)) par(cex=0.5) 參數類型 說明 例子 高階參數 必須在高階繪圖函數下設定 xlab, type 版面編排參數 可以在高階繪圖函數或是par()函數下設定 cex, col 一般參數 必須透過par()函數才能設定 fig, mfrow
低階繪圖函數 指令 說明 例子 text 可增加文字於設定位置 plot(1:10,type="n") text(2,2,"Hi,CWB!") text(locator(1),"Hi") box 產生座標軸框框 box() rect 產生新的矩形 rect(-3,-3,3,3) new 增加高階繪圖函數的圖到現有的圖上 plot(1:10,ylab="") par(new=T) plot(10:1,ylab="") axis 可增加座標軸及修改刻度表示顏色等等細節 par(mfrow=c(2,2)) plot(1:10) plot(1:10,axes=F) axis(1) axis(2,lty=2,col="red") axis(3,at=c(5,9),labels=c("A","B"))
低階繪圖函數 指令 說明 例子 srt,crt 設定文字或符號旋轉的角度 plot(1:10,type="n") text(2,2,"srt=90",srt=90) text(4,4,"srt=0",srt=0) cex 設定文字或符號大小 par(mfrow=c(2,1)) plot(1:10) plot(1:10,cex=0.5) cex.axis cex.lab cex.main cex.sub 設定座標軸文字大小 設定lab文字大小 設定標題文字大小 設定子標題文字大小 plot(1:10,main=”1:10”) plot(1:10,main=”1:10”,cex.axis=0.5, cex.lab=0.5,cex.main=0.5) font 指定文字字型 par(mfrow=c(1,1)) text(2,2,"plain",font=1) text(4,4,"bold face",font=2) text(6,6,"italic",font=3) text(8,8,"bold italic",font=4)
低階繪圖函數 指令 說明 例子 las 控制label的方向 par(mfrow=c(2,2)) plot(1:10,las=0,main="las=0") plot(1:10,las=1,main="las=1") plot(1:10,las=2,main="las=2") plot(1:10,las=3,main="las=3") bty 控制box的形式 par(mfrow=c(2,3)) plot(1:10,main='bty="o"') plot(1:10,bty="n",main='bty="n"') plot(1:10,bty="c",main='bty="c"') plot(1:10,bty="l",main='bty="l"') plot(1:10,bty="7",main='bty="7"') plot(1:10,bty="7",main='bty="u"') bg 背景顏色 par(bg="lightgray") new 設定點、線、文字等顏色 par(mfrow=c(1,1)) plot(1:10,col=1:10,pch=1:10,cex=1:10)
Example-text() 73 畫出data1中,身高體重的散佈圖,並標示出其迴歸線(weight=-113.5+1.05high)
Practice 畫出Surgical data中, clot與prog的散佈圖,並標示出其迴歸線(porg=57.75+0.95clot) 74 畫出Surgical data中, clot與prog的散佈圖,並標示出其迴歸線(porg=57.75+0.95clot)
Example-cex 75 設定字形大小
axis() 修改座標軸之文字、刻度、顏色… 76 修改座標軸之文字、刻度、顏色… axis(side, at = NULL, labels = TRUE, tick = TRUE, lty = "solid", lwd = 1,col = NULL, ...) side: 1=below, 2=left, 3=above and 4=right at: 要修改的位置 labels: 修改座標軸刻度,可以是數字或文字 tick:a logical value specifying whether tickmarks and an axis line should be drawn box(): 產生座標軸框框
Example par(mfrow=c(1,2)) boxplot(split(clot,gender)) 77 par(mfrow=c(1,2)) boxplot(split(clot,gender)) boxplot(split(clot,gender),axes=F) axis(1,1:2,labels=c("male","female")) axis(2,tick=F) box()
Practice 78 畫出Surgical data中,不同Dum1的clot之盒鬚圖(X軸之標示為Dum1=0與Dum1=1)
Table 79 計算離散型資料的次數分配表 R函數:table(變數1,變數2,變數3,…)
Practice 80 計算Surgical data中,男女的人數 分別列出男女接受Dum1治療的人數
長條圖(bar chart ) 描述離散型資料之次數分配 81 描述離散型資料之次數分配 barplot(height, width = 1, beside = FALSE, horiz = FALSE, density = NULL, main = NULL, sub = NULL, xlab = NULL, ylab = NULL, xlim = NULL, ylim = NULL, ...) height: either a vector or matrix of values describing the bars which make up the plot width: bar widths beside: 若height為矩陣,beside=T會將不同變數之長條圖並列
Example 82
Example 83 barplot(table(sex,bt),beside=F, legend=T, col=c("pink","skyblue")) barplot(table(sex,bt),beside=F,col=c("pink","skyblue")) legend(1,10,legend=c("F","M"),pch=15,col=c("pink","skyblue"))
Example 84 barplot(table(sex,bt),beside=T,legend=T,col=c(3,7))
Example 85 barplot(table(sex,bt),beside=T,legend=T,horiz=T,col=c(4,6))
Practice 86 畫出data 1中,居住區域之長條圖 畫出data 1中,血型與居住區域之長條圖(上下堆疊、左右相依、水平)
在長條圖上標示個數 cc=barplot(table(sex,bt),legend=T,ylim=c(0,12)) 87 cc=barplot(table(sex,bt),legend=T,ylim=c(0,12)) text(cc,colSums(table(sex,bt))+0.1,colSums(table(sex,bt)))
Example 88 kk=barplot(table(sex,bt),beside=T,legend=T,col=c("pink","skyblue"),ylim=c(0,9)) text(kk,table(sex,bt)+0.1,table(sex,bt))
Practice 89 畫出data 1中,居住區域之長條圖,並標示出其個數。 畫出data 1中,血型與居住區域之長條圖,並標示出其個數。
Homework 在TemperatureMonth資料中 請將A、B、C三地的各月平均氣溫用不同色的線畫出來 90 在TemperatureMonth資料中 請將A、B、C三地的各月平均氣溫用不同色的線畫出來 將X軸的標示(1-12)改成月份(中英文皆可) 在圖中空白位置標上學號