R語言由淺入深:第三章、數據可視化


第三章、數據可視化

本章主要是了解一下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.panelupper.panel 來分別設置主對角線下方和上方的元素類型。 text.paneldiag.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將展示殘差的圖例。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM