本文涉及的基礎圖形有條形圖、餅圖、直方圖、核密度圖、箱線圖、點圖。
條形圖
條形圖通過垂直或水平的條形展示類別變量的分佈(頻數)。
函數barplot()
調用格式:
barplot(height)
其中,height是一個向量或一個矩陣。
適用條件
- 分類變量
分類
#載入包
library(vcd)
#獲取分類變量數據
counts <- table(Arthritis$Improved)
#分類變量
counts
None Some Marked
42 14 28
使用table()函數生成分類變量。
- 簡單條形圖
如果height爲一個向量,則它的值就是確定了各條形的高度。
#簡單條形圖
barplot(counts,main = 'Simple Bar Plot',xlab = 'Improvement',ylab = 'Fre')
#水平條形圖
barplot(counts,main = 'Simple Bar Plot',xlab = 'Improvement',ylab = 'Fre',horiz = TRUE)
簡單條形圖
水平條形圖
加入horiz=TRUE,生成水平條形圖。
- 堆砌條形圖和分組條形圖
如果height是一個矩陣而不是一個向量則繪圖結果將是一幅堆砌條形圖或分組條形圖。
參數 | 描述 |
---|---|
beside | beside=FALSE(默認值),堆砌條形圖。矩陣中每列的取值堆砌在同一條形上。 |
beside | beside=TRUE,分組條形圖,矩陣中每列的取值表示一個分組。 |
#生成數據
counts <- table(Arthritis$Improved,Arthritis$Treatment)
counts
Placebo Treated
None 29 13
Some 7 7
Marked 7 21
#堆砌條形圖
barplot(counts,main = 'Stacked Bar Plot',xlab = 'Treatment',ylab = 'Fre',col = c('red','yellow','green'),legend=rownames(counts))
#分組條形圖
barplot(counts,main = 'Grouped Bar Plot',xlab = 'Treatment',ylab = 'Fre',col = c('red','yellow','green'),legend=rownames(counts),beside = TRUE)
堆砌條形圖
分組條形圖
- 均值條形圖
使用數據整合函數生成相關結果,將結果傳遞給barplot函數,生成表示平均值、中位數、標準差等的條形圖。
#生成數據框
states <- data.frame(state.region,state.x77)
#根據地區生成文盲率的平均值
means <- aggregate(states$Illiteracy,by=list(state.region),FUN=mean)
#平均值
means
Group.1 x
1 Northeast 1.000000
2 South 1.737500
3 North Central 0.700000
4 West 1.023077
#將均值從小到大排序
means <- means[order(means$x),]
means
Group.1 x
3 North Central 0.700000
1 Northeast 1.000000
4 West 1.023077
2 South 1.737500
#均值條形圖
barplot(means$x,names.arg = means$Group.1)
#添加標題
title('地區平均文盲率')
均值條形圖
- 棘狀圖
棘狀圖是對堆砌條形圖的重縮放,這樣每個條形的高度均爲1,每一段的高度即表示比例。通過vcd包spine()函數繪製。
#載入包
library(vcd)
#綁定數據集
attach(Arthritis)
counts <- table(Treatment,Improved)
#生成棘狀圖
spine(counts,main='Spinogram Example')
#解除綁定
detach(Arthritis)
棘狀圖
餅圖
餅圖以餅狀圖展示分類變量組成。
函數pie(x,labels)
其中,x是一個非負數值向量,表示每個扇形的面積。而labels表示各扇形標籤的字符型向量。
適用條件
- 分類變量
示例
par(mfrow=c(2,2))
slices <- c(10,12.4,16,8)
lbls <- c('US','Uk','Australia','Germany','France')
pie(slices,labels = lbls,main='Simple Pie Chart')
餅圖
直方圖
直方圖通過將在x軸上將值域分割爲一定數量的組,在y軸上顯示相應值的頻數,展示連續變量的分佈。
函數hist(x)
其中x是一個由數據值組成的數值向量。參數freq=FALSE表示根據概率密度而不是頻數繪製圖形。參數breaks用於控制組的數量。默認生成等距切分。
適用條件
- 連續變量
示例
hist(mtcars$mpg)
直方圖
核密度圖
核密度估計是用於估計隨機變量概率密度函數的一種非參數方法。
核密度圖函數
plot(density(x))
其中,x爲一個數值向量。
適用條件
- 連續變量的分佈
示例
plot(density(mtcars$mpg))
核密度圖
箱線圖
箱線圖通過繪製連續變量的最小值、下四分位數、中位數、上四分位數及最大值,描述連續變量的分佈。
函數boxplot()
適用條件
- 連續變量
- 判斷數據異常點
分類
- 最簡單的箱線圖
boxplot(mtcars$mpg,main='Box plot',ylab='Miles per Gallon')
最簡單的箱線圖
- 分組箱線圖
boxplot(formula,data=dataframe)
其中,formula爲表達式(y~A,根據分類變量A生成連續變量y的箱線圖),data爲一個數據框。
參數 | 描述 |
---|---|
varwidth=TRUE | 將使箱線圖的寬度與其樣本大小的平方根成正比 |
horizontal=TRUE | 可以反轉座標軸的方向 |
notch=TRUE | 可以得到含凹槽的箱線圖。兩個箱的凹槽互不重疊,則說明它們的中位數有顯著差異。 |
boxplot(mpg~cyl,data=mtcars,main='Car Mileage Data',xlab = 'Number of Cylinders',ylab = 'Miles per Gallon')
分組箱線圖
小提琴圖
小提琴圖(violin plot)是箱線圖變種。它是箱線圖與核密度的結合。通過vioplot包vioplot()函數繪製。
函數vioplot(x1,x2,…,names=,col=)
其中x1,x2,…表示要繪製的一個或多個數值向量
示例
#載入包
library(vioplot)
#綁定數據集
attach(mtcars)
#生成數據
x1 <- mpg[cyl==4]
x2 <- mpg[cyl==6]
x3 <- mpg[cyl==8]
#繪圖
vioplot(x1,x2,x3,names = c('4 cyl','6 cyl', '8 cyl'),col = 'gold')
[1] 10.4 33.9
#解除綁定
detach(mtcars)
小提琴圖
點圖
點圖提供一種在簡單水平刻度上繪製大量有標籤值的方法。通過dotchart()函數實現。
dotchart(x,labels=)
其中x是一個數值向量,labels是由每個點的標籤組成的向量。
參數 | 描述 |
---|---|
groups | 選中一個分類變量,對x分組 |
gcolor | 控制不同組標籤的顏色 |
示例
dotchart(mtcars$mpg,labels = row.names(mtcars),cex=.7,main = 'Gas Mileage for Car Models',xlab = 'Miles per Gallon')
點圖