《R语言实战》第6章
生活随笔
收集整理的這篇文章主要介紹了
《R语言实战》第6章
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
# 第六章 基本圖形
# 本章內容
# 條形圖、箱線圖和點圖
# 餅圖和扇形圖
# 直方圖與核密度圖# 6.1 條形圖
# 條形圖通過垂直的或水平的條形展示了類別型變量的分布(頻數)。
# 在接下來的示例中,我們將繪制一項探索類風濕性關節炎新療法研究的結果。數據已包含在隨vcd包分發的Arthritis數據框中。由于vcd包并沒用包括在R的默認安裝中,請確保在第一 次使用之前先下載并安裝它
install.packages("vcd")# 6.1.1 簡單的條形圖
library(vcd)
counts <- table(Arthritis$Improved)
# 查看結果
counts
# 代碼清單6-1 簡單的條形圖
barplot(counts,main = "Simple Bar Plot",xlab = "Improvement", ylab = "Frequency")
# 水平條形圖
barplot(counts,main = "Horizontal Bar Plot",xlab = "Frequency", ylab = "Improvement",horiz = TRUE)
# 若要繪制的類別型變量是一個因子或有序型因子,就可以使用函數plot()快速創建一幅垂直條形圖。由于Arthritis$Improved是一個因子,所以代碼:
plot(Arthritis$Improved, main = "Simple Bar Plot",xlab = "Improved", ylab = "Frequency")
# 以下代碼在MacOs中不能使用hozize
# plot(Arthritis$Improved, main = "Horizontal Bar Plot",
# xlab = "Frequency", ylab = "Improvement",
# horize = TRUE)# 6.1.2 堆砌條形圖和分組條形圖
# 如果height是一個矩陣而不是一個向量,則繪圖結果將是一幅堆砌條形圖或分組條形圖。 若beside=FALSE(默認值),則矩陣中的每一列都將生成圖中的一個條形,各列中的值將給出 堆砌的“子條”的高度。若beside=TRUE,則矩陣中的每一列都表示一個分組,各列中的值將 并列而不是堆砌。
# 考慮治療類型和改善情況的列聯表:
library(vcd)
counts <- table(Arthritis$Improved, Arthritis$Treatment)
counts
# 代碼清單6-2 堆砌條形圖和分組條形圖
# 堆砌條形圖
barplot(counts,main = "Stacked Bar Flot",xlab = "Treatment", ylab = "Frequency",col = c("red", "yellow", "green"))
# 分組條形圖
barplot(counts,main = "Grouped Bar Plot",xlab = "Treatment", ylab = "Frequency",col = c("red", "yellow", "green"),legend = row.names(counts), beside = TRUE)# 6.1.3 均值條形圖
states <- data.frame(state.region, state.x77)
means <- aggregate(states$Illiteracy, by = list(state.region), FUN = mean)
# 將均值從小到大排序
means <- means[order(means$x), ]
# means$x是包含各條形高度的向量,而添加選項names.arg=means$Group.1 是為了展示標簽。
barplot(means$x, names.arg = means$Group.1)
# 添加標題
title("Mean Illiteracy Rate")
# 自己添加線
lines(means$x, type = "p")# 6.1.4 條形圖的微調
# 可以使用參數cex.names來減小字號。將其指定為小于1的值可以縮小標簽的大小。可選的參 數names.arg允許你指定一個字符向量作為條形的標簽名。
# 代碼清單6-4 為條形圖搭配標簽
# (使用mar)增加了y 邊界的大小
par(mar = c(5, 8, 4, 2))
# (使用las=2)旋轉了條形的標簽、修改了標簽文本
par(las = 2)
counts <- table(Arthritis$Improved)
barplot(counts,main = "Treatment Outcome",horiz = TRUE, cex.names = 0.8,names.arg = c("No Improvement", "Some Improvement","Marked Improvement"))# 6.1.5 棘狀圖
# 棘狀圖對堆砌條形圖進行了重縮放,這樣每個條形的高度均為1,每一段的高度即表示比例。棘狀圖可由vcd包中的函數spine()繪制。
library(vcd)
attach(Arthritis)
counts <- table(Treatment, Improved)
spine(counts, main = "Spinogram Example")
detach(Arthritis)# 6.2 餅圖
# 將四副圖形組合為一幅
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")
# 為餅狀圖添加比例數值
pct <- round(slices / sum(slices) * 100)
lbls2 <- paste(lbls, " ", pct, "%", seq="")
pie(slices, labels = lbls2,col = rainbow(length(lbls2)),main = "Pie Chart with Percentages")
# 創建三維餅圖
#install.packages("plotrix")
library(plotrix)
pie3D(slices, labels = lbls, explode = 0.1, labelcex = 0.8, main = "3D Pie Chart")
# 從表格創建餅圖
mytable <- table(state.region)
lbls3 <- paste(names(mytable), "\n", mytable, seq="")
pie(mytable, lables = lbls3,main = "Pie Chart from a Table \n (with sample sizes)")# 扇形圖(fan plot)
library(plotrix)
slices <- c(10, 12, 4, 16, 8)
lbls <- c("US", "UK", "Australia", "Germanny", "France")
fan.plot(slices, labels = lbls, main = "Fan Plot")# 6.3 直方圖
# 直方圖通過在X 軸上將值域分割為一定數量的組,在Y 軸上顯示相應值的頻數,展示了連續型變量的分布。可以使用如下函數創建直方圖:
# hist(x)
# 其中的x是一個由數據值組成的數值向量。參數freq=FALSE表示根據概率密度而不是頻數繪制 圖形。參數breaks用于控制組的數量。在定義直方圖中的單元時,默認將生成等距切分。
# 代碼清單6-6 直方圖
par(mfrow = c(2, 2))
# 1、簡單直方圖
hist(mtcars$mpg)
# 2、指定數組和顏色
hist(mtcars$mpg,breaks = 12,col = "red",xlab = "Miles Per Gallon",main = "Colored histogram with 12 bins")
# 3、添加軸須圖
hist(mtcars$mpg,freq = FALSE,breaks = 12,col = "red",xlab = "Miles Per Gallon",main = "Histogram, run plot, density curve")
# 疊加了一條密度曲線 和軸須圖(rug plot)。這條密度曲線是一個核密度估計
rug(jitter(mtcars$mpg))
# 使用lines()函數疊加了這條藍色、雙倍默認線條寬度的曲線。
lines(density(mtcars$mpg), col = "blue", lwd = 2)
# 4、添加正態密度曲線和外框
x <- mtcars$mpg
h <- hist(x,breaks = 12,col = "red",xlab = "Miles Per Gallon",main = "Histogram with normal curve and box")
xfit <- seq(min(x), max(x), length = 40)
yfit <- dnorm(xfit, mean = mean(x), sd = sd(x))
lines(xfit, yfit, col = "blue", lwd = 2)
box()# 6.4 核密度圖
# 核密度估計是用于估計隨機變 量概率密度函數的一種非參數方法。從總體上講,核 密度圖不失為一種用來觀察連續型變量分布的有效方法。繪制密度圖的方法(不疊加到另一幅圖 上方)為:
# plot(density(x))
# 其中的x是一個數值型向量。由于plot()函數會創建一幅新的圖形,所以要向一幅已經存在的圖 形上疊加一條密度曲線,可以使用lines()函數
# 代碼清單6-7 核密度圖
par(mfrow = c(2, 1))
# 第一幅圖:完全使用默認設置創建的最簡圖形
d <- density(mtcars$mpg)
plot(d)
# 第二幅圖
d <- density(mtcars$mpg)
# 添加了一 個標題
plot(d, main = "Kernel Density of Miles Per Gallon")
# 將曲線修改為藍色,使用實心紅色填充了曲線下方的區域,
polygon(d, col = "red", border = "blue")
# 并添加了棕色的軸須圖
rug(mtcars$mpg, col = "brown")# 使用sm包中的sm.density.compare()函數可向圖形疊加兩組或更多的核密度圖。使用格市為:
# sm.dennsity.compare(x, factor)
# 其中的x是一個數值型向量,factor是一個分組變量。請在第一次使用sm包之前先安裝它。
# 代碼清單6-8 可比較的核密度圖
# 雙倍線條寬度
install.packages("sm")
nopar(lwd = 2)
# 找不到 sm 包?! 所以下面的代碼就執行不了了
library(sm)
attach(mtcars)
# 創建分組因子
cyl.f <- factor(cyl, levels = c(4, 6, 8),labels = c("4 cylinder", "6 cylinder","8 cylinder"))
# 繪制密度圖
sm.density.compare(mpg, cyl, xlab = "Miles Per Gallon")
title(main = "MPG Distribution by Car Cylinders")
# 通過鼠標單機添加圖例
colfill <- c(2:(1 + length(levels(cyl.f))))
legend(locator(l), levels(cyl.f), fill = colfill)
detach(mtcars)# 6.5 箱線圖
# 箱線圖(又稱盒須圖)通過繪制連續型變量的五數總括,即最小值、下四分位數(第25百分 位數)、中位數(第50百分位數)、上四分位數(第75百分位數)以及最大值,描述了連續型變量 的分布。
# 箱線圖能夠顯示出可能為離群點(范圍±1.5*IQR以外的值,IQR表示四分位距,即上 四分位數與下四分位數的差值)的觀測。
# 例如:
boxplot(mtcars$mpg, main = "Box plot", ylab = "Miles per Gallon")
# 通過一下語句可以查看每加侖汽油行駛英里數的中位數是19.2,50%的值都落在了15.3和22.8之間,最小值為10.4,最大值為33.9。
boxplot.stats(mtcars$mpg)# 6.5.1 使用并列箱線圖進行跨組比較
# 箱線圖可以展示單個變量或分組變量。使用格式為:
# boxplot(formula, data = data.frame)
# 其中的formula是一個公式,dataframe代表提供數據的數據框(或列表)。一個示例公式為y ~ A,這將為類別型變量A的每個值并列地生成數值型變量y的箱線圖。公式y ~ A*B則將為類別型 變量A和B所有水平的兩兩組合生成數值型變量y的箱線圖。
# 添加參數varwidth=TRUE將使箱線圖的寬度與其樣本大小的平方根成正比。參數 horizontal=TRUE可以反轉坐標軸的方向
# 在以下代碼中,我們使用并列箱線圖重新研究了四缸、六缸、八缸發動機對每加侖汽油行駛 的英里數的影響。
boxplot(mpg ~ cyl, data = mtcars,main = "Car Mileage Data",xlab = "Number of Cylinders",ylab = "Miles Per Gallon")# 箱線圖靈活多變,通過添加notch=TRUE,可以得到含凹槽的箱線圖。若兩個箱的凹槽互不 重疊,則表明它們的中位數有顯著差異(Chambers et al., 1983, p. 62)。以下代碼將為我們的車型 油耗示例創建一幅含凹槽的箱線圖:
boxplot(mpg ~ cyl, data = mtcars,notch = TRUE,varwidth = TRUE,col = "red",main = "Car Mileage Data",xlab = "Number of Cylinders",ylab = "Miles Per Gallon")
# 參數col以紅色填充了箱線圖,而varwidth=TRUE則使箱線圖的寬度與它們各自的樣本大小 成正比。# 代碼清單6-9 兩個交叉因子的箱線圖
# 創建汽缸數量的因子
mtcars$cyl.f <- factor(mtcars$cyl,levels = c(4, 6, 8),labels = c("4", "6", "8"))
# 創建變速箱類型的因子
mtcars$am.f <- factor(mtcars$am,levels = c(0, 1),labels = c("auto", "standard"))# 生成箱線圖
boxplot(mpg ~ am.f * cyl.f,data = mtcars,varwidth = TRUE,col = c("gold", "darkgreen"),main = "MPG Distribution by Auto Type",xlab = "Auto Type")# 6.5.2 小提琴圖
# 小提琴圖是箱線圖與核密度圖的結合。你可以使用vioplot包中的vioplot()函數繪制它。請在第一次使用之前先安裝vioplot包。
# vioplot()函數的使用格式為:
# Vioplot(x1, x2, ..., names = , col =)
# 其中x1, x2, ...表示要繪制的一個或多個數值向量(將為每個向量繪制一幅小提琴圖)。參數 names是小提琴圖中標簽的字符向量,而col是一個為每幅小提琴圖指定顏色的向量。
# 代碼清單6-10 小提琴圖
install.packages("vioplot")
# 執行以下代碼報錯:Error: package ‘sm’ required by ‘vioplot’ could not be found
library(vioplot)
x1 <- mtcars$mpg[mtcars$cyl == 4]
x2 <- mtcars$mpg[mtcars$cyl == 6]
x3 <- mtcars$mpg[mtcars$cyl == 8]
vioplot(x1, x2, x3,names = c("4 cyl", "6 cyl", "8 cyl"),col = "gold")
title("Violin Plots of Miles Per Gallon")# 6.6 點圖
# 點圖提供了一種在簡單水平刻度上繪制大量有標簽值的方法。你可以使用dotchart()函數創建點圖,格式為:
# dotchart(x, labels = )
# 其中的x是一個數值向量,而labels則是由每個點的標簽組成的向量。你可以通過添加參數groups來選定一個因子,用以指定x中元素的分組方式。如果這樣做,則參數gcolor可以控制 不同組標簽的顏色,cex可控制標簽的大小。這里是mtcars數據集的一個示例:
dotchart(mtcars$mpg, labels = row.names(mtcars), cex = .7,main = "Gas Mileage for Car Models",xlab = "Miles Per Gallon")
# 以上代碼可以在在同一個水平軸上觀察每種車型的每加侖汽油行駛英里數
# 代碼清單6-11 分組、排序、著色后的點圖
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"
# 根據每加侖汽油行駛英里數(從最低到最高)對數據框mtcars進行排序,結果 保存為數據框x。數值向量cyl被轉換為一個因子。一個字符型向量(color)被添加到了數據框 x中,根據cyl的值,它所含的值為"red"、"blue"或"darkgreen"。另外,各數據點的標簽取自數據框的行名(車輛型號)。數據點根據汽缸數量分組。數字4、6和8以黑色顯示。點和標簽的
# 在本例中,你可以從點圖中獲得顯著的洞察力,因為每個點都有標簽,每個點的值都有其內 在含義,并且這些點是以一種能夠促進比較的方式排布的。但是隨著數據點的增多,點圖的實用 14 性隨之下降。顏色來自向量color,點以填充的圓圈表示。
dotchart(x$mpg,labels = row.names(x),cex = .7,groups = x$cyl,gcolor = "black",color = x$color,pch = 19,main = "Gas Mileage for Car Models\n grouped by cylinder",xlab = "Miles Per Gallon")
總結
以上是生活随笔為你收集整理的《R语言实战》第6章的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《R语言实战》第4章
- 下一篇: 《R语言实战》第7章