R语言acres92 region_《R语言实战》读书笔记-- 第六章 基本图形
首先寫第二部分的前言。
第二部分用來介紹獲取數據基本信息的圖形技術和統計方法。
本章主要內容
條形圖、箱型圖、點圖
餅圖和扇形圖
直方圖和核密度圖
分析數據第一步就是要觀察它,用可視化的方式是最好的。本章的主題有兩個
1、將變量的分布作可視化展示
2、通過結果變量進行跨組比較
下面從不同的圖形開始探索數據。
6.1條形圖
6.1.1簡單地條形圖
條形圖是通過條形展示離散變量的頻數分布。函數是barplot:
barplot(height) height是主要參數,horiz = TRUE就是橫向條形圖。
height可以是數值向量或者矩陣。向量的話就是向量每個元素的分布,矩陣的話是按照列一個一個往上加,就是堆疊。
如果要繪制的變量是因子或者有序因子,可以使用plot函數,直接畫出條形統計圖,形式為plot(因子),書上的例子plot(Arthritis$Improved)。
6.1.2堆砌條形圖和分組條形圖
barplot后面加矩陣時,如果beside = FALSE 得到一個堆砌條形圖,若為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)
下面是結果:
注意上面的代碼中,添加圖例的命令只有在對矩陣作用時才能用。
自然可以對圖例進行一下設置(亂弄的,熟悉一下命令):
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均值條形圖
條形圖不一定全都進行數據頻數的展示,還可以將均值、中位數方差等傳遞給barplot函數。
states
means
FUN=mean)
means
barplot(means$x,names.arg= means$Group.1)
其實本質是一樣的。lines(means$x)可以在上面圖中頂端加一條折線,gplots包中barplot2函數可以作更復雜的圖。
6.1.4條形圖的微調
6.1.5棘狀圖
棘狀圖對堆砌條形圖進行重縮放,每個條形的高度均為1,不同的頻數對應著比例。vcd包中的spine函數可以做棘狀圖。
library(vcd)
counts
spine(counts,main= "Spinogram Example")
6.2餅圖
書上上來就說餅圖不是很常用,R中關于餅圖的選型不多.
pie函數:
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, ...)
#主要參數當然是x和labels,其中x是非負數值型變量,表示面積,labels是名稱.
下面是一個例子:
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函數,可以畫立體餅圖.
餅圖不太容易看出相對的比例大小,為改善這種情況,有 fan.plot 扇形圖來展現大小關系.在plotrix包中,fan.plot函數可以實現.
fan.plot(slices,labels = lbls,main = "Fan Plot")
上面的例子中,扇形張開角的大小就是相對比例關系,而半徑大小無所謂.
6.3直方圖
直方圖通過將值域分為幾組,Y值顯示頻數。用hist函數生成:
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是一個數值向量,矩陣也可以;breaks是設置組數;
#freq是一個邏輯值,表示是否歸一化數據 其他參數用到再說
下面是一個例子:
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是將數據歸一化
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)
需要寫幾個函數:
lines(x, y = NULL, type = "l", ...)
#向圖形中添加曲線,lines(x,cos(x)),不會另起一幅圖形界面
rug函數:添加“地毯”
rug(x, ticksize = 0.03, side = 1, lwd = 0.5, col = par("fg"),
quiet = getOption("warn") < 0, ...)
#應該就是第三幅圖中橫軸下面的短線。通常和jitter連用,這是為了避免線的重疊。
jitter函數:為數值向量添加一個擾動
jitter(x, factor = 1, amount = NULL)
#x是數值向量,factor是一個數值,與amount一起決定波動范圍,amount是波動的范圍設置。其實,這個函數相當于
r
density函數:
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, ...)
是一個核密度函數,通常與畫圖函數一起用.下面寫寫核密度估計.
核密度估計是非參數估計的一種,是用來估計一組數的規律用的,所謂非參數,就是不假定數據服從某種分布,而只是利用已知的數據進行分布估計。比如用一個點附近的幾個點的均值作為此處的值。有一些核函數可以確定估計方式。最重要的是帶寬的選取,有一個公式可以用來評價規律的好壞。
上面的函數中,x是數據,bw是帶寬,adjust是與帶寬相關的值,共同決定帶寬。
還要看一下box函數:
為已經畫出的圖形周邊添加一個盒子,可以設置線型、顏色等。
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")
#注意這里有個函數:polygon這是一個畫多邊形的函數
polygon(x, y = NULL, density = NULL, angle = 45,
border = NULL, col = NA, lty = par("lty"),
..., fillOddEven = FALSE)
#其中x、y是包含多邊形頂點的向量,density是密度的設置,其他比較平凡。
d
plot(d,main = "Kernel Density of Miles Per Gallon")
polygon(d,density = 10,col = "red",border = "blue") #注意這里加上了線的密度,圖形見下面斜線圖。
rug(mtcars$mpg,col = "brown")
下面注意了,書上說和密度圖可以比較組間差距,確實是這樣,來看一下,感覺這個挺有用。利用sm包中的sm.density.compare函數進行操作。
sm.density.compare(x, group, h, model = "none", ...)
#x是一個數值向量,group是分組因子向量,關于model,下面兩個圖是一個對比:
y
g
sm.density.compare(y, g, model
="equal") #一個跟bootstrap相等假設檢驗相關的量,還會顯示一個適當帶子
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函數是用鼠標點擊確定位置
箱線圖是一項可視化分布和組間差異的手段,并且很常用。
6.5箱線圖
箱線圖繪制連續型變量的五個數 最小數、.25四分位數、中位數、.75分位數、最大值。還可以顯示離群點 正負1.5*IQR 以外的值,其中IQR是四分位距(上下四分之一分位數之差)。boxplot函數:
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)
#參數比價直觀,用的時候差
可以使用boxplot.stats(x)可以顯示箱線圖的各種統計量。
6.5.1使用并列箱線圖進行跨足比較
boxplot函數:
boxplot(formula, data = NULL, ..., subset, na.action =NULL)
#這里的formula是公式,而data是列表或者數據框。
#示例函數 y~A 將為類別變量A的每個值并列的生成數值型變量y的箱線圖。y~A*B 將為變量A和B所有水平的兩兩組合生成數值型變量y的箱線圖。
#參數 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")
話說多圖的目的在于更好地體現數據的信息,那么圖形的各種屬性是可以反應數據的特點的,比如 notch = TRUE在中位數的地方加一個凹槽,可以明顯看出中位數的差別,而寬度varwidth = TRUE 表示寬度與樣本量平方根成正比,可以看出樣本量的大小關系。
下面又一個例子:
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時,耗油最少。可以很好的反應y的影響因素。同時,由寬度大小,可以看出8.auto和4.standard數量最多。
6.5.2小提琴圖
作為箱線圖和核密度圖的結合,小提琴圖名字還是第一次聽過。vioplot包中vioplot函數可以繪制此圖。函數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")
#值得注意的是,必須將每一個想畫小提琴圖的向量分別列出來,不能用數據框……
圖中,中間的白點和黑線是中位數和分位數等箱線圖元素,而周邊曲線是核密度圖。關于小提琴圖,書上說,時間會證明一切。
6.6點圖
dotchart函數:
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是一個數值向量或者矩陣,labels是每個值的標簽組成的向量,groups是對向量x進行分組,
#gdata是分組數據的量,比如均值、中位數等 其他參數比較平凡
下面是例子:
dotchart(mtcars$mpg,labels = row.names(mtcars),cex = .7)
一般而言,點圖經過排序,并且將分組分別涂色表示以后才更有用。
下面的例子:
mtc
mtc$cyl
mtc$color[mtc$cyl== 4]
labels=row.names(mtc),
cex= .7,
groups=mtc$cyl,
gcolor= "black", #這個語句是設置labels的顯示顏色,就是圖中的4、6、8
color=mtc$color,
pch= 19,
main= "Gas Mileage for Car Models\ngrouded by cylinder",
xlab= "Miles Per Gallon")
從上圖中可以看出,隨著缸數的增加,每加侖英里數在減少~但是也有特殊點和離群點,特殊點是最上面的兩個綠點,離群點是最下面兩個綠點。
注意,Himsc中有dotchart2函數,提供更豐富的點圖選項。
下一章用于描述分布和二元關系的定量統計方法和一類推斷方法,需要看一遍統計了。
總結
以上是生活随笔為你收集整理的R语言acres92 region_《R语言实战》读书笔记-- 第六章 基本图形的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 详解python中的用法_详解pytho
- 下一篇: ajax从mysql提取数据在html中