第三章、數據可視化
本章主要是了解一下R語言中自帶的一些畫圖工具和數據包,用以數據分析。
注:本章大部分代碼出自老師PPT,數據是R語言自帶數據,圖像是自己練習截圖,本文主要是記錄自己的練習過程。
本章的基本內容:
基本圖形:條形圖、餅圖、直方圖、核密度圖、箱線圖、馬賽克圖
中級繪圖:散點圖、氣泡圖、折線圖、相關圖、馬賽克圖
一、基本圖形
1.條形圖(Bar plots)
使用vcd包
(1)簡單條形圖:
barplot(height)
其中height是一個向量或一個矩陣
例:數據源是隨vcd包分發的Arthritis數據框,探索類風濕性關節炎新療法研究的結果
library(vcd)
counts<-table(Arthritis$Improved)#准備數據
head(counts)
#vertical barplot
barplot(counts,main = "Simple Bar Plot",
xlab = "Improvement",ylab = "Frequency")
#horizontal bar plot
barplot(counts,main="Horizintal Bar Plot",
xlab = "Frequency",ylab = "Improvement",horiz = TRUE)
(2)堆砌條形圖(stacked barplot):報告里比較喜歡堆砌條形圖
選擇數據
counts1<-table(Arthritis$Improved,Arthritis$Treatment)
counts1
#stacked barplot
barplot(counts1,
main = "Stacked barplot",
xlab = "Treatment",ylab = "Freequency",
col=c("red","yellow","green"),
legend=rownames(counts1))
(3)分組條形圖(grouped barplot):
# grouped barplot
barplot(counts1,
main="Grouped Bar Plot",
xlab="Treatment", ylab="Frequency",
col=c("red", "yellow", "green"),
legend=rownames(counts1), beside=TRUE)
(4)均值條形圖
除了基於計數數據或頻率數據,還可以使用數據整合函數結合barplot()函數,來創建表示均值、中位數、標准差等的條形圖
例:美國各個地區平均文盲率排序的條形圖:
states <- data.frame(state.region, state.x77)#R自帶數據
means <- aggregate(states$Illiteracy,
by=list(state.region), FUN=mean) #聚合運算求均值
means <- means[order(means$x),] #排序
barplot(means$x, names.arg=means$Group.1)
title("Mean Illiteracy Rate Barplot")
2.餅圖
統計學家更傾向於使用條形圖或點圖,數據分析中用的不多。
(1)餅圖的創建:
餅圖可以由pie(x,labels)創建
其中x是一個非負的數值向量,表示每個扇形的面積,而labels則是表示各個扇形標簽的字符型向量。
(2)餅圖舉例:
①簡單的餅圖
pieces<-c(15,4,6,25,11)
names<-c("a","b","c","d","e")
pie(pieces,labels = names,main = "Pie chart")
②3D餅圖(僅僅是炫酷而已)
install.packages("plotrix")#先導入包
library(plotrix)
pie3D(pieces,labels = names,explode = 0.1,main="3D pie")
③扇形圖(Fan plot)
fan.plot(pieces,labels = names,main = "Fan plot")
3.直方圖(Histograms)
直方圖通過在X軸上將值域分割為一定數量的組,在Y軸上顯示相應值的頻數,展示了連續型變量的分布
hist(x)
其中x是一個由數據值組成的數值向量。參數freq=FALSE表示根據概率密度而不是頻數繪制圖形。參數breaks用於控制組的數量。在定義直方圖中的單元時,默認將生成等距切分。
(1)例1:簡單直方圖
hist(mtcars$mpg)
(2)例2:指定組數和顏色
hist(mtcars$mpg
,breaks = 10,
col = "green",
xlab = "Miles per G",
main="green histogram with 10 bins")
4.核密度圖(Kernel density plots):
核密度估計是用於估計隨機變量概率密度函數的 一種非參數方法。
會根據樣本進行建模,不利用數據分布的先驗知識。
(1)繪制方法:
plot(density(x))
其中x是一個數值型向量
plot()函數會創建一幅新的圖形,所以要向一幅已經存在的圖形上疊加一條密度曲線,可以使用lines()函數。
(2)例1:
d <- density(mtcars$mpg) #returns the density data
plot(d) #plots the results
(3)核密度圖直方圖疊加:
使用lines()
hist(mtcars$mpg,
freq=FALSE,
breaks=12,
col="green",
xlab="Miles Per Gallon",
main="Histogram, density curve")
lines(density(mtcars$mpg), col="blue", lwd=2)
5.箱線圖/盒裝圖(Box plots)
(1)單個盒裝圖
箱線圖通過繪制連續型變量的五數總括,即最小值、下四分位數、中位數、上四分位數以及最大值,描述了連續型變量的分布。箱線圖能夠顯示出可能為離群點的觀測。
優點:數據量少,簡潔
缺點:數據量少,簡潔
例:
boxplot(mtcars$mpg, main="Box plot", ylab="Miles per Gallon")
(2)多個箱線圖(使用並列箱線圖進行跨組比較)
格式為: boxplot(formula, data=dataframe)
其中的formula是一個公式,dataframe代表提供數據的數據框(或列表)。一個示例公式為y~A,這將為類別型變量A的每個值並列地生成數值型變量y的箱線圖。公式y~ A*B則將為類別型變量A和B所有水平的兩 兩組合生成數值型變量y的箱線圖。
例:
boxplot(mpg~cyl,data=mtcars,
main="Car Milage Data",
xlab="Number of Cylinders",
ylab="Miles Per Gallon")
公式mpg~cyl表示:針對不同的 cyl數值,分別生成mpg的箱線圖。
6.點圖(Dot plots)
點圖提供了一種在簡單水平刻度上繪制大量有標簽值的方法。
(1)創建方式:
使用dotchart() 函數創建點圖,格式為dotchart(x,labels=)
其中的x是一個數值向量,而labels則是由 每個點的標簽組成的向量
(2)示例:
#cex指定字符大小
dotchart(mtcars$mpg, labels=row.names(mtcars), cex=.6,
main="Gas Mileage for Car Models",
xlab="Miles Per Gallon")
(3)示例:
x <- mtcars[order(mtcars$mpg),]
x$cyl <- factor(x$cyl)
x$color[x$cyl==4] <- "red"
x$color[x$cyl==6] <- "blue"
x$color[x$cyl==8] <- "darkgreen"
dotchart(x$mpg,
labels = row.names(x),
cex=.7,
pch=19,
groups = x$cyl,
gcolor = "black",
color = x$color,
main = "Gas Mileage for Car Models\ngrouped by cylinder",
xlab = "Miles Per Gallon")
二、中級繪圖
1.散點圖
(1)散點圖:描述兩個連續型變量之間的關系
R中創建散點圖的基礎函數是plot(x, y),其中,x和y是數值型向量,代表着圖形中的(x, y)點。
例:探究車重和單位油量行駛公里數的關系
attach(mtcars)
plot(wt, mpg,
main="Basic Scatterplot of MPG vs. Weight",
xlab="Car Weight (lbs/1000)",
ylab="Miles Per Gallon ", pch=19)
abline(lm(mpg ~ wt), col="red", lwd=2, lty=1) #在plot圖上添加直線
#abline()函數用來添加最佳擬合的線性直線
detach(mtcars)
(2)散點圖矩陣:P32
pairs()函數創建基礎的散點圖矩陣
①例:
pairs(~ mpg + disp + drat + wt, data=mtcars,
main="Basic Scatterplot Matrix")
②更復雜一點的散點圖矩陣(與其他圖像相結合):
library(car)
scatterplotMatrix(~ mpg + disp + drat + wt,
data=mtcars, spread=FALSE,
smoother.args=list(lty=2),
main="Scatter Plot Matrix via car Package")
(3)高密度散點圖:
smoothScatter()函數,可利用核密度估計生成用顏色密度來表示點分布的散點圖
例:人為設計的例子,10000個觀測點
set.seed(1234)
n <- 10000
c1 <- matrix(rnorm(n, mean=0, sd=.5), ncol=2)
c2 <- matrix(rnorm(n, mean=3, sd=2), ncol=2)
mydata <- rbind(c1, c2)
mydata <- as.data.frame(mydata)
names(mydata) <- c("x", "y")
with(mydata, smoothScatter(x, y,
main="Scatter Plot colored by Smoothed Densities"))
這樣就較容易地表現出那個地方的密度更大了。
hexbin()將二元變量的封箱放到六邊形單元格內。
IDPmisc包中的iplot()函數可通過顏色來表示點的密度(在某特定點上數據點的數目)
(4)三維散點圖:比較炫酷,但是用處一般
使用scatterplot3d中的scatterplot3d()函數繪制
scatterplot3d(x,y,z)
x,y,z均表示向量
2.氣泡圖:添加第三變量
除了通過三維散點圖可以展示三個定量變量間的關系,還可以使用二維散點圖,加上用點的大小來代表第三個變量的值。即氣泡圖。
symbols(x, y, circle=radius)
3.折線圖(Line charts):
刻畫數據變動的圖像
①折線圖的創建:
plot(x,y,type=)
lines(x,y,type=)
折線圖的一些類型:
②plot()和lines()的區別
plot()函數是被調用時即創建一幅新圖;lines()函數則是在已存在的圖形上添加信息, 並不能自己生成圖形。
因此,lines()函數通常是在plot()函數生成 一幅圖形后再被調用
③折線圖例子:
R自帶Orange數據集
t1 <- subset(Orange, Tree==1)
plot(t1$age, t1$circumference,
xlab="Age (days)",
ylab="Circumference (mm)",
main="Orange Tree 1 Growth",
type="b")
4.相關圖(Correlograms):
比較現代的方法,相關系數矩陣來表示,相關系數矩陣是多元統計分析的一個基本方式。
哪些被考察的變量與其他變量相關 性很強,而哪些並不強?相關變量是否以 某種特定的方式聚集在一起?隨着變量數 的增加,這類問題將變得更難回答。
相關圖是檢驗定量變量中眾多二元關系的一種有效方式。
(1)corrgram()函數格式:
corrgram(x, order=, panel=, text.panel=, diag.panel=)
其中,x是一行一個觀測的數據框。當order = TRUE時,相關矩陣將使用主成分分析法對變 量重新排序,這使得二元變量的關系模式更為 明顯。選項panel 設定非對角線面板使用的元素類型。可通過選項lower.panel和upper.panel 來分別設置主對角線下方和上方的元素類型。 text.panel和diag.panel選項控制着主對角線元素類型。
(2)相關圖例子:
library(corrgram)
corrgram(mtcars, order=TRUE,
lower.panel=panel.shade,
upper.panel=panel.pie, text.panel=panel.txt,
main="Corrgram of mtcars intercorrelations")
下三角:藍色斜杠表示單元格中的兩個變量呈正相關。紅色斜杠 表示變量呈負相關。色彩越深, 說明變量相關性越大。
上三角:顏色的功能同上,但相關性大小由被填 充的餅圖塊的大小來展示。正相關性將從12點鍾處開始順時針填充餅圖,而負相關性則逆時針方 向填充餅圖。
5.馬賽克圖:
①進行復雜分析的時候還是有用的。
馬賽克圖用於可視化兩個以上的類別型變量(只觀察單個類別型變量,可以使用柱狀圖或者餅圖)。
②mosaic()函數調用格式:
mosaic(table,shade=,legend=)
其中table是數組形式的列聯表。
添加選項shade = TRUE將根據擬合模型的皮爾遜殘差值對圖形上色。
添加選項legend = TRUE將展示殘差的圖例。