R语言acres92 region_《R语言实战》读书笔记-- 第六章 基本图形
首先寫第二部分的前言。
第二部分用來介紹獲取數(shù)據(jù)基本信息的圖形技術(shù)和統(tǒng)計(jì)方法。
本章主要內(nèi)容
條形圖、箱型圖、點(diǎn)圖
餅圖和扇形圖
直方圖和核密度圖
分析數(shù)據(jù)第一步就是要觀察它,用可視化的方式是最好的。本章的主題有兩個(gè)
1、將變量的分布作可視化展示
2、通過結(jié)果變量進(jìn)行跨組比較
下面從不同的圖形開始探索數(shù)據(jù)。
6.1條形圖
6.1.1簡單地條形圖
條形圖是通過條形展示離散變量的頻數(shù)分布。函數(shù)是barplot:
barplot(height) height是主要參數(shù),horiz = TRUE就是橫向條形圖。
height可以是數(shù)值向量或者矩陣。向量的話就是向量每個(gè)元素的分布,矩陣的話是按照列一個(gè)一個(gè)往上加,就是堆疊。
如果要繪制的變量是因子或者有序因子,可以使用plot函數(shù),直接畫出條形統(tǒng)計(jì)圖,形式為plot(因子),書上的例子plot(Arthritis$Improved)。
6.1.2堆砌條形圖和分組條形圖
barplot后面加矩陣時(shí),如果beside = FALSE 得到一個(gè)堆砌條形圖,若為TRUE,則為分組條形圖。下面是示例:
opar
par(mfrow= c(1,2))
library(vcd)
counts
barplot(counts,
main= "Stacked Bar Plot",
xlab= "Treatment",ylab = "Frequency",
col= c("red","yellow","green"),
legend=rownames(counts))
barplot(counts,
main= "Grouped Bar Plot",
xlab= "Treatment",ylab = "Frequency",
col= c("red","yellow","green"),
legend=rownames(counts),
beside=TRUE)
par(opar)
下面是結(jié)果:
注意上面的代碼中,添加圖例的命令只有在對(duì)矩陣作用時(shí)才能用。
自然可以對(duì)圖例進(jìn)行一下設(shè)置(亂弄的,熟悉一下命令):
barplot(counts,
main= "Stacked Bar Plot",
xlab= "Treatment",ylab = "Frequency",
col= c("red","yellow","green")
)
legend("top",legend =rownames(counts),
col= c("red","yellow","green"),cex = 0.8,
pch= rep(15,3),bg = "blue")
6.1.3均值條形圖
條形圖不一定全都進(jìn)行數(shù)據(jù)頻數(shù)的展示,還可以將均值、中位數(shù)方差等傳遞給barplot函數(shù)。
states
means
FUN=mean)
means
barplot(means$x,names.arg= means$Group.1)
其實(shí)本質(zhì)是一樣的。lines(means$x)可以在上面圖中頂端加一條折線,gplots包中barplot2函數(shù)可以作更復(fù)雜的圖。
6.1.4條形圖的微調(diào)
6.1.5棘狀圖
棘狀圖對(duì)堆砌條形圖進(jìn)行重縮放,每個(gè)條形的高度均為1,不同的頻數(shù)對(duì)應(yīng)著比例。vcd包中的spine函數(shù)可以做棘狀圖。
library(vcd)
counts
spine(counts,main= "Spinogram Example")
6.2餅圖
書上上來就說餅圖不是很常用,R中關(guān)于餅圖的選型不多.
pie函數(shù):
pie(x, labels = names(x), edges = 200, radius = 0.8,
clockwise= FALSE, init.angle = if(clockwise) 90 else 0,
density= NULL, angle = 45, col = NULL, border =NULL,
lty= NULL, main =NULL, ...)
#主要參數(shù)當(dāng)然是x和labels,其中x是非負(fù)數(shù)值型變量,表示面積,labels是名稱.
下面是一個(gè)例子:
par(mfrow = c(2,2))
slices
lbls
pie(slices,labels=lbls,
main= "Simple Pie Chart")
pct
lbls2
pie(slices,labels=lbls2,
col=rainbow(length(lbls2)),
main= "Pie Chart with Percentages")
library(plotrix)
pie3D(slices,labels=lbls2,explode = 0.1,
mian= "3D Pie Chart")
mytable
lbls3
pie(mytable,labels=lbls3,
main= "Pie Chart from a Table\n(with sample sizes)")
注意上面的例子中,plotrix中的pie3D函數(shù),可以畫立體餅圖.
餅圖不太容易看出相對(duì)的比例大小,為改善這種情況,有 fan.plot 扇形圖來展現(xiàn)大小關(guān)系.在plotrix包中,fan.plot函數(shù)可以實(shí)現(xiàn).
fan.plot(slices,labels = lbls,main = "Fan Plot")
上面的例子中,扇形張開角的大小就是相對(duì)比例關(guān)系,而半徑大小無所謂.
6.3直方圖
直方圖通過將值域分為幾組,Y值顯示頻數(shù)。用hist函數(shù)生成:
hist(x, breaks = "Sturges",
freq= NULL, probability = !freq,
include.lowest= TRUE, right =TRUE,
density= NULL, angle = 45, col = NULL, border =NULL,
main= paste("Histogram of", xname),
xlim= range(breaks), ylim =NULL,
xlab=xname, ylab,
axes= TRUE, plot = TRUE, labels =FALSE,
nclass= NULL, warn.unused =TRUE, ...)
#這里的x是一個(gè)數(shù)值向量,矩陣也可以;breaks是設(shè)置組數(shù);
#freq是一個(gè)邏輯值,表示是否歸一化數(shù)據(jù) 其他參數(shù)用到再說
下面是一個(gè)例子:
par(mfrow=c(2,2))
hist(mtcars$mpg)
hist(mtcars$mpg,
breaks= 12,
col= "red",
xlab= "Miles Per Gallon",
main= "Colored histgram with 12 bins")
hist(mtcars$mpg,
freq=FALSE, #FALSE是將數(shù)據(jù)歸一化
breaks= 12,
col= "red",
xlab= "Miles Per Gallon",
main= "Histogram,rug plot,density")
rug(jitter(mtcars$mpg))
lines(density(mtcars$mpg),col= "blue",lwd = 2)
需要寫幾個(gè)函數(shù):
lines(x, y = NULL, type = "l", ...)
#向圖形中添加曲線,lines(x,cos(x)),不會(huì)另起一幅圖形界面
rug函數(shù):添加“地毯”
rug(x, ticksize = 0.03, side = 1, lwd = 0.5, col = par("fg"),
quiet = getOption("warn") < 0, ...)
#應(yīng)該就是第三幅圖中橫軸下面的短線。通常和jitter連用,這是為了避免線的重疊。
jitter函數(shù):為數(shù)值向量添加一個(gè)擾動(dòng)
jitter(x, factor = 1, amount = NULL)
#x是數(shù)值向量,factor是一個(gè)數(shù)值,與amount一起決定波動(dòng)范圍,amount是波動(dòng)的范圍設(shè)置。其實(shí),這個(gè)函數(shù)相當(dāng)于
r
density函數(shù):
density(x, bw = "nrd0", adjust = 1,
kernel = c("gaussian", "epanechnikov", "rectangular",
"triangular", "biweight",
"cosine", "optcosine"),
weights = NULL, window = kernel, width,
give.Rkern = FALSE,
n = 512, from, to, cut = 3, na.rm = FALSE, ...)
是一個(gè)核密度函數(shù),通常與畫圖函數(shù)一起用.下面寫寫核密度估計(jì).
核密度估計(jì)是非參數(shù)估計(jì)的一種,是用來估計(jì)一組數(shù)的規(guī)律用的,所謂非參數(shù),就是不假定數(shù)據(jù)服從某種分布,而只是利用已知的數(shù)據(jù)進(jìn)行分布估計(jì)。比如用一個(gè)點(diǎn)附近的幾個(gè)點(diǎn)的均值作為此處的值。有一些核函數(shù)可以確定估計(jì)方式。最重要的是帶寬的選取,有一個(gè)公式可以用來評(píng)價(jià)規(guī)律的好壞。
上面的函數(shù)中,x是數(shù)據(jù),bw是帶寬,adjust是與帶寬相關(guān)的值,共同決定帶寬。
還要看一下box函數(shù):
為已經(jīng)畫出的圖形周邊添加一個(gè)盒子,可以設(shè)置線型、顏色等。
6.4核密度圖
用plot(density(x))來畫核密度圖。例子:
par(mfrow = c(2,1))
d
plot(d)
d
plot(d,main= "Kernel Density of Miles Per Gallon")
polygon(d,col= "red",border = "blue")
rug(mtcars$mpg,col= "brown")
#注意這里有個(gè)函數(shù):polygon這是一個(gè)畫多邊形的函數(shù)
polygon(x, y = NULL, density = NULL, angle = 45,
border = NULL, col = NA, lty = par("lty"),
..., fillOddEven = FALSE)
#其中x、y是包含多邊形頂點(diǎn)的向量,density是密度的設(shè)置,其他比較平凡。
d
plot(d,main = "Kernel Density of Miles Per Gallon")
polygon(d,density = 10,col = "red",border = "blue") #注意這里加上了線的密度,圖形見下面斜線圖。
rug(mtcars$mpg,col = "brown")
下面注意了,書上說和密度圖可以比較組間差距,確實(shí)是這樣,來看一下,感覺這個(gè)挺有用。利用sm包中的sm.density.compare函數(shù)進(jìn)行操作。
sm.density.compare(x, group, h, model = "none", ...)
#x是一個(gè)數(shù)值向量,group是分組因子向量,關(guān)于model,下面兩個(gè)圖是一個(gè)對(duì)比:
y
g
sm.density.compare(y, g, model
="equal") #一個(gè)跟bootstrap相等假設(shè)檢驗(yàn)相關(guān)的量,還會(huì)顯示一個(gè)適當(dāng)帶子
sm.density.compare(y, g, model="none") #畫簡單圖
par(lwd = 2)
library(sm)
cyl.f
labels= c("4 cylinder","6 cylinder","8 cylinder"))
sm.density.compare(mtcars$mpg,mtcars$cyl,xlab= "Miles Per Gallon")
title(main= "MPG Distribution by Car Clyinders")
colfill
legend(locator(1),levels(cyl.f),fill=colfill) #這里的locator函數(shù)是用鼠標(biāo)點(diǎn)擊確定位置
箱線圖是一項(xiàng)可視化分布和組間差異的手段,并且很常用。
6.5箱線圖
箱線圖繪制連續(xù)型變量的五個(gè)數(shù) 最小數(shù)、.25四分位數(shù)、中位數(shù)、.75分位數(shù)、最大值。還可以顯示離群點(diǎn) 正負(fù)1.5*IQR 以外的值,其中IQR是四分位距(上下四分之一分位數(shù)之差)。boxplot函數(shù):
boxplot(x, ..., range = 1.5, width = NULL, varwidth =FALSE,
notch= FALSE, outline = TRUE, names, plot =TRUE,
border= par("fg"), col = NULL, log = "",
pars= list(boxwex = 0.8, staplewex = 0.5, outwex = 0.5),
horizontal= FALSE, add = FALSE, at = NULL)
#參數(shù)比價(jià)直觀,用的時(shí)候差
可以使用boxplot.stats(x)可以顯示箱線圖的各種統(tǒng)計(jì)量。
6.5.1使用并列箱線圖進(jìn)行跨足比較
boxplot函數(shù):
boxplot(formula, data = NULL, ..., subset, na.action =NULL)
#這里的formula是公式,而data是列表或者數(shù)據(jù)框。
#示例函數(shù) y~A 將為類別變量A的每個(gè)值并列的生成數(shù)值型變量y的箱線圖。y~A*B 將為變量A和B所有水平的兩兩組合生成數(shù)值型變量y的箱線圖。
#參數(shù) varwidth= TRUE 是使箱線圖的寬度與樣本使大小的平方根 成正比。
例子:
boxplot(mpg~cyl,data =mtcars,
notch=TRUE,
varwidth=TRUE,
col= "red",
main= "Car Mileage Data",
xlab= "Number of Cylinders",
ylab= "Miles Per Gallon")
話說多圖的目的在于更好地體現(xiàn)數(shù)據(jù)的信息,那么圖形的各種屬性是可以反應(yīng)數(shù)據(jù)的特點(diǎn)的,比如 notch = TRUE在中位數(shù)的地方加一個(gè)凹槽,可以明顯看出中位數(shù)的差別,而寬度varwidth = TRUE 表示寬度與樣本量平方根成正比,可以看出樣本量的大小關(guān)系。
下面又一個(gè)例子:
mtc
mtc$cyl.f
labels= c("4","6","8"))
mtc$am.f
labels= c("auto","standard"))
boxplot(mpg~cyl.f*am.f,data =mtc,
varwidth=TRUE,
col= c("gold","darkgreen"),
main= "Mpg Distribution by Auto Types",
xlab= "Auto Types")
上面的圖形中,可以看出cyl越小,并且為standard時(shí),耗油最少??梢院芎玫姆磻?yīng)y的影響因素。同時(shí),由寬度大小,可以看出8.auto和4.standard數(shù)量最多。
6.5.2小提琴圖
作為箱線圖和核密度圖的結(jié)合,小提琴圖名字還是第一次聽過。vioplot包中vioplot函數(shù)可以繪制此圖。函數(shù)vioplot:
vioplot( x, ..., range=1.5, h, ylim, names, horizontal=FALSE,
col="magenta", border="black", lty=1, lwd=1, rectCol="black",
colMed="white", pchMed=19, at, add=FALSE, wex=1,
drawRect=TRUE)
例子:
library("vioplot")
x1
x2
x3
vioplot(x1,x2,x3,
names= c("4","6","8"),
col= "gold")
title("Violin Plot of Miles Per Gallon")
#值得注意的是,必須將每一個(gè)想畫小提琴圖的向量分別列出來,不能用數(shù)據(jù)框……
圖中,中間的白點(diǎn)和黑線是中位數(shù)和分位數(shù)等箱線圖元素,而周邊曲線是核密度圖。關(guān)于小提琴圖,書上說,時(shí)間會(huì)證明一切。
6.6點(diǎn)圖
dotchart函數(shù):
dotchart(x, labels = NULL, groups = NULL, gdata =NULL,
cex= par("cex"), pch = 21, gpch = 21, bg = par("bg"),
color= par("fg"), gcolor = par("fg"), lcolor = "gray",
xlim= range(x[is.finite(x)]),
main= NULL, xlab = NULL, ylab =NULL, ...)
#這里x是一個(gè)數(shù)值向量或者矩陣,labels是每個(gè)值的標(biāo)簽組成的向量,groups是對(duì)向量x進(jìn)行分組,
#gdata是分組數(shù)據(jù)的量,比如均值、中位數(shù)等 其他參數(shù)比較平凡
下面是例子:
dotchart(mtcars$mpg,labels = row.names(mtcars),cex = .7)
一般而言,點(diǎn)圖經(jīng)過排序,并且將分組分別涂色表示以后才更有用。
下面的例子:
mtc
mtc$cyl
mtc$color[mtc$cyl== 4]
labels=row.names(mtc),
cex= .7,
groups=mtc$cyl,
gcolor= "black", #這個(gè)語句是設(shè)置labels的顯示顏色,就是圖中的4、6、8
color=mtc$color,
pch= 19,
main= "Gas Mileage for Car Models\ngrouded by cylinder",
xlab= "Miles Per Gallon")
從上圖中可以看出,隨著缸數(shù)的增加,每加侖英里數(shù)在減少~但是也有特殊點(diǎn)和離群點(diǎn),特殊點(diǎn)是最上面的兩個(gè)綠點(diǎn),離群點(diǎn)是最下面兩個(gè)綠點(diǎn)。
注意,Himsc中有dotchart2函數(shù),提供更豐富的點(diǎn)圖選項(xiàng)。
下一章用于描述分布和二元關(guān)系的定量統(tǒng)計(jì)方法和一類推斷方法,需要看一遍統(tǒng)計(jì)了。
總結(jié)
以上是生活随笔為你收集整理的R语言acres92 region_《R语言实战》读书笔记-- 第六章 基本图形的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 详解python中的用法_详解pytho
- 下一篇: 西文是指什么_儒家君子文化:何为君子?为