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, ...)
参数 | 描述 |
---|---|
x | 样本构成的向量 |
breaks | 规定直方图的组距离 1. 向量:给出直方图的起点、终点与组距 2. 数:定义直方图的组距 3. 字符串 4. 函数:计算组距的宽度 |
freq | 是逻辑变量 1. TRUE: 绘出频率直方图 2. counts 绘出频率直方图 3. FALSE:绘出密度直方图 |
probability | 是逻辑变量与freq相反,是与 S-PLUS 相兼容的参数 TRUE:绘出密度直方图 FALSE 绘出频率直方图 |
col | 表示直方图填充的颜色 |
plot | 是逻辑变量 TRUE: 表示给出直方图 FALSE表示列出直方图的各种结果 |
w <- c(75.0, 64.0, 47.4, 66.9, 62.2, 62.2, 58.7, 63.5, 66.6, 64.0, 57.0, 69.0, 56.9, 50.0, 72.0)
hist(w, freq = FALSE)
w <- c(75.0, 64.0, 47.4, 66.9, 62.2, 62.2, 58.7, 63.5, 66.6, 64.0, 57.0, 69.0, 56.9, 50.0, 72.0)
hist(w, freq=FALSE)
lines(density(w), col="blue")
x<- 44:76
lines(x, dnorm(x, mean(w), sd(w)), col="red")
density()
已知样本,估计其密度,数据的分布提供了一种平滑的描述,从中看出分布的大致形状
density(x, bw="nrd0", adjust = 1,
kernel = c("gaussian","epanechnikov","rectangular","triangular","biweight", "cosine", "optcosine"),
window = kernel, width,
give.Rkern = FALSE,
n=512, from, to, cut=3, na.rm=FALSE)
参数 | 描述 |
---|---|
x | 是由样本构成的向量 |
bw | 是带宽,可选择 当bw省略时,R软件会画出光滑的曲线 |
example2_2 <- read.csv("D:/WorkSpace/R/Statistic_R/utf_8/example/ch2/example2_2.csv",encoding="UTF-8",stringsAsFactors = TRUE)
example2_2
d <- example2_2$销售额
par(mfrow=c(2,2),mai=c(0.6,0.6,0.4,0.1), cex=0.7)
hist(d, xlab="销售额", ylab="频数",main="(a)普通")
hist(d, breaks=20, col="lightblue", xlab="销售额", ylab="频数",main="(b)分成20组")
hist(d, prob=TRUE, breaks=20, col="lightblue", xlab="销售额", ylab="密度",main="(c)增加轴须线和核密度线")
rug(d) #增加轴须线
lines(density(d),col="red")
hist(d, prob=TRUE, breaks=20, col="lightblue", xlab="销售额", ylab="密度",main="(d)增加正态密度线")
curve(dnorm(x,mean(d),sd(d)), add=T, col="red")
rug(jitter(d))
rug()
轴须线再现了原始数据在x轴上的位置
rug(x)
重现数据x(作图时将数据点在x轴上再现出来)
jitter()
观察实际的数据在x轴上的位置
jitter(x)
计算出现数据x个各扰动点
R语言自带数据集(美国黄石国家公园老忠实间歇喷泉数据集)
给出了272次观察的喷发持续时间(eruptions)和下此喷发的等待间隔时间(waiting) 两个变量(单位:分钟)
hist(faithful$eruptions, breaks=20, prob=T, xlab="喷发持续时间", col="lightblue", main="")
rug(faithful$eruptions)
lines(density(faithful$eruptions, bw=0.1), type="l", lwd=2, col="red")
curve(dnorm(x, mean=mean(faithful$eruptions), sd=sd(faithful$eruptions)),add=T, col="blue", lwd=2, lty=6)
ecdf()
w <- c(75.0, 64.0, 47.4, 66.9, 62.2, 62.2, 58.7, 63.5, 66.6, 64.0, 57.0, 69.0, 56.9, 50.0, 72.0)
plot(ecdf(w), verticals=TRUE, do.p=FALSE)
x <- 44:78
lines(x, pnorm(x, mean(w), sd(w)))
qqnorm()
与qqline()
w <- c(75.0, 64.0, 47.4, 66.9, 62.2, 62.2, 58.7, 63.5, 66.6, 64.0, 57.0, 69.0, 56.9, 50.0, 72.0)
qqnorm(w);
qqline(w);
stem()
茎叶图(stem-and-leaf plot)不仅反映数据的分布特征,而且保留原始数据的信息
stem(x, scale = 1, width = 80, atom=1e-8)
参数 | 描述 |
---|---|
x | 数据向量 |
scale | 控制茎叶图的长度 |
width | 绘图的宽度 |
atom | 容差 |
茎: 纵轴测定数据
叶: 数据频数
x <- c(25, 45, 50, 54, 55, 61, 64, 68, 72, 75, 75, 78, 79, 81, 83, 84, 84, 84, 85, 86, 86, 86, 87, 89, 89, 89, 90, 91, 92, 100);
stem(x);
scale = 2
将10个个位数分成两段,0~4为一段,5~9为另一段
stem(x, scale = 2)
scale = 1/2
将10个个位数分成1/2段,即20个数为一段
stem(x, scale = 0.5)
aplpack包
stem.leaf()
数据较多时使用多茎图,将茎重复列出2次或5次
install.packages("aplpack")
茎次数 | 描述 |
---|---|
2次 | * 表示茎的叶子上的数为 0~4 . 表示茎的叶子上的数为 5~9 |
5次 | * 表示茎的叶子上的数为0和1 t 表示茎的叶子上的数为2和3 s 表示茎的叶子上的数为4和5 t 表示茎的叶子上的数为6和7 . 表示茎的叶子上的数为8和9 |
数据深度
把数据从小到大排序(升序)或从大到小排序(降序),一个数据的深度是指该数据升序和降序中的最小值
茎叶图中每一行列出的是该行中的最大深度
stem.leaf(data,unit,m,...)
参数 | 描述 |
---|---|
data | 数据向量 |
unit | 叶子的单位 |
m | 茎的重复次数 |
example2_2 <- read.csv("D:/WorkSpace/R/Statistic_R/utf_8/example/ch2/example2_2.csv",encoding="UTF-8",stringsAsFactors = TRUE)
example2_2
library(aplpack)
stem.leaf(example2_2$销售额,1,2)
example2_2 <- read.csv("D:/WorkSpace/R/Statistic_R/utf_8/example/ch2/example2_2.csv",encoding="UTF-8",stringsAsFactors = TRUE)
example2_2
library(aplpack)
stem.leaf(example2_2$销售额,1,5)
aplpack包
stem.leaf.backback()
当有两个样本且数据可比时
example2_2 <- read.csv("D:/WorkSpace/R/Statistic_R/utf_8/example/ch2/example2_2.csv",encoding="UTF-8",stringsAsFactors = TRUE)
example2_2
library(aplpack)
stem.leaf.backback(example2_2$销售额[1:60],example2_2$销售额[61:120])
boxplot()
箱线图直观简洁地展现数据分布的主要特征.
IQR 四分位差(四分位距)【interquartile rangel】
表示上四分位与下四分位差 Q 75 % − Q 25 % Q_{75\%}-Q_{25\%} Q75%−Q25%
内围栏(inter fence)
是与 Q 25 % Q_{25\%} Q25% 和 Q 75 % Q_{75\%} Q75% 的距离等于1.5倍四分位差的两个点
下内围栏
Q 25 % − 1.5 × I Q R Q_{25\%}-1.5\times IQR Q25%−1.5×IQR
上内围栏
Q 75 % + 1.5 × I Q R Q_{75\%}+1.5\times IQR Q75%+1.5×IQR
相邻值
相邻值(adjacent value):找出上下内围栏之间的最大值和最小值(即非离群点的最大值和最小值)
下相邻值
m i n ( 大 于 ( Q 25 % − 1.5 × I Q R ) ) min(大于(Q_{25\%}-1.5\times IQR)) min(大于(Q25%−1.5×IQR))
上相邻值
m a x ( 小 于 ( Q 75 % + 1.5 × I Q R ) ) max(小于(Q_{75\%}+1.5\times IQR)) max(小于(Q75%+1.5×IQR))
触须:
表示数据的散布范围, 用直线将上下相邻值分别与箱子连接
离群点(outlier)
是大于上内围栏值或小于下内围栏值得数值,也称外部点(outside value)
x <- c(25, 45, 50, 54, 55, 61, 64, 68, 72, 75, 75, 78, 79, 81, 83, 84, 84, 84, 85, 86, 86, 86, 87, 89, 89, 89, 90, 91, 92, 100);
boxplot(x);
三种使用形式:
boxplot(x,...)
参数 | 描述 |
---|---|
x | 由数据构成的数值型向量、或者列表、或者数据框 |
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)
参数 | 描述 |
---|---|
x | 由数据构成的数值型向量、或者列表、或者数据框 |
range | 是“触须”的范围(缺省值为1.5) range=0:将极值与箱子连接 |
notch | 是逻辑变量 notch=TRUE ,画出的箱线图带有切口 notch=FALSE(默认) ,画出的箱线图不带有切口 |
outline | 是逻辑变量 outline = FALSE ,不标明异常值点 outline=TRUE(默认) ,标明异常值点 |
col | 是颜色变量 赋给不同值,将绘出不同颜色的箱线图 |
horizontal | 是逻辑变量 horizontal=TRUE ,把箱线图绘成水平状 horizontal=FALSE(默认) ,把箱线图绘成垂直状 |
add | 是逻辑变量 add=TRUE ,在原图上画图 add=FALSE(默认) ,替换上一张图 |
width | 自定义箱子宽度 varwidth=FALSE 所有箱子宽度都一样 varwidth=TRUE 箱子的宽度与样本量的平方根成比例 |
A <- c(79.98, 80.04, 80.02, 80.04, 80.03, 80.03, 80.04, 79.97, 80.05, 80.03, 80.02, 80.00, 80.02)
B <- c(80.02, 79.94, 79.98, 79.97, 79.97, 80.03, 79.95, 79.97)
boxplot(A, B, notch=T, names=c('A','B'), col=c(2,3))
boxplot(formula, data = NULL, ..., subset, na.action=NULL)
参数 | 描述 |
---|---|
formula | 是公式,如 y ~ grp y是由数据构成的数值型向量 grp 是数据的分组,通常是因子 |
data | 数据结构 |
par(mfrow=c(3,1),mai=c(0.4,0.2,0.3,0.2))
x <- rnorm(1000,50,5);x # 随机1000个服从正态分布并且均值为50,标准差为5
boxplot(x, range=1.5, col="red", horizontal=TRUE, main="相邻值与箱子连接得箱线图(range=1.5)",cex=0.8)
boxplot(x, range=3, col="green", horizontal=TRUE, main="相邻值与箱子连接得箱线图(range=3)",cex=0.8)
boxplot(x, range=0, col="pink", horizontal=TRUE, varwidth=T,main="相邻值与箱子连接得箱线图(range=0, varwidth=T)",cex=0.8)
example2_2 <- read.csv("D:/WorkSpace/R/Statistic_R/utf_8/example/ch2/example2_2.csv",encoding="UTF-8",stringsAsFactors = TRUE)
example2_2
x <- example2_2$销售额
layout(matrix(c(1,2), nc=1), heights=c(2,1))
par(mai=c(0.15, 0.4, 0.2, 0.2), cex=0.8)
hist(x, freq=FALSE, col="lightblue", breaks=15, xlab="", ylab="", main="")
rug(x, col="blue4")
abline(v=quantile(x), col="blue4", lwd=2, lty=6)
points(quantile(x), c(0,0,0,0,0), lwd=5, col="red2")
lines(density(x), col="red", lwd=2)
par(mai=c(0.35,0.42,0.2,0.43), cex=0.8)
boxplot(x, col="pink", lwd=2, horizontal=T)
rug(x, ticksize=0.1, col="blue4")
abline(v=quantile(x), col="blue4", lwd=2, lty=6)
example2_3 <- read.csv("D:/WorkSpace/R/Statistic_R/utf_8/example/ch2/example2_3.csv",encoding="UTF-8",stringsAsFactors = TRUE);
example2_3 <- example2_3[,2:7]
boxplot(example2_3, col="lightblue", xlab="运动员", ylab="射击环数", cel.lab=0.8,cex.axis=0.6)
fivenum()
重要特征的五个数:
中位数、下四分位数、上四分位数、最小值、最大值
fivenum(x, na.rm=TRUE)
参数 | 描述 |
---|---|
x | 样本数据 |
na.rm | 是逻辑变量 na.rm=TRUE(默认), 函数可以处理带有缺失数据的向量 na.rm=FALSE, 函数不能处理带有缺失数据的向量 |
x <- c(25, 45, 50, 54, 55, 61, 64, 68, 72, 75, 75, 78, 79, 81, 83, 84, 84, 84, 85, 86, 86, 86, 87, 89, 89, 89, 90, 91, 92, 100);
fivenum(x)
vioplot包
vioplot()
小提琴图(violin plot) 将分布的核密度估计曲线与箱线图结合在一起,它在箱线图上以镜像方式叠加一条核密度估计曲线。
核密度估计曲线可以看出数据分布的大致形状
vioplot(x, range=1.5, names, horizontal=FALSE,...)
参数 | 描述 |
---|---|
range | 默认 range=1.5 确定1.5倍的四分位差为上下内围栏 |
names | 数据的标签或标签向量 |
install.packages("vioplot")
example2_3 <- read.csv("D:/WorkSpace/R/Statistic_R/utf_8/example/ch2/example2_3.csv",encoding="UTF-8",stringsAsFactors = TRUE);
library(vioplot)
x1 <- example2_3$亚历山大.彼得里夫利
x2 <- example2_3[,3]
x3 <- example2_3[,4]
x4 <- example2_3[,5]
x5 <- example2_3[,6]
x6 <- example2_3[,7]
vioplot(x1,x2,x3,x4,x5,x6,col="lightblue",names=names(example2_3)[2:7])
点图(dot plot) 也称 Cleveland 克利夫兰点图
将数据用点绘制在图中,是检测数据离散点的有效工具
example2_3 <- read.csv("D:/WorkSpace/R/Statistic_R/utf_8/example/ch2/example2_3.csv",encoding="UTF-8",stringsAsFactors = TRUE);
example2_3 <- cbind(example2_3, id=factor(1:20)); example2_3
library(reshape)
example2_3_1 <- melt(example2_3[,2:8], id.vars=c("id"), variable_name="运动员");example2_3_1
example2_3_1 <- rename(example2_3_1, c(value="射击环数"));example2_3_1
write.csv(example2_3_1, file="D:/WorkSpace/R/Statistic_R/utf_8/example/ch2/example2_3_1.csv",fileEncoding="UTF-8")
dotchart()
example2_3_1 <- read.csv("D:/WorkSpace/R/Statistic_R/utf_8/example/ch2/example2_3_1.csv",encoding="UTF-8",stringsAsFactors = TRUE);example2_3_1
dotchart(example2_3_1$射击环数,groups=example2_3_1$运动员, xlab="射击环数", pch=20)
dotchart(mtcars$mpg,labels = row.names(mtcars),cex = .7,
main="Gas Mileage for Car Models",
xlab = "Miles Per Gallon")
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,groups=x$cyl,gcolor = "black",
color = x$color,main="Gas Mileage for Car Models",
xlab = "Miles Per Gallon")
lattice包
dotplot()
install.packages("lattice")
library(lattice)
example2_3_1 <- read.csv("D:/WorkSpace/R/Statistic_R/utf_8/example/ch2/example2_3_1.csv",encoding="UTF-8",stringsAsFactors = TRUE);example2_3_1
dotplot(射击环数~运动员, data=example2_3_1, col="blue",pch=19)
核密度估计(density estimation) 是根据一定的核(kernel)函数和适当的带宽(bandwidth)对数据的分布密度做出估计
核密度图(kernel density plot) 是对核密度估计的一种描述,利用该图可看出数据的实际分布状况
plot()
绘制example2_2 <- read.csv("D:/WorkSpace/R/Statistic_R/utf_8/example/ch2/example2_2.csv",encoding="UTF-8",stringsAsFactors = TRUE)
example2_2
d <- example2_2$销售额
par(mfrow=c(1,2),mai=c(0.7,0.7,0.6,0.1),cex=0.7,cex.main=0.8)
plot(density(d),col=1,xlab="销售额",ylab="密度",main="")
rug(d,col="blue")
plot(density(d),col=1,xlab="销售额",ylab="密度",main="")
polygon(density(d),col="gold",border="black")
rug(d,col="brown")
lattice包
densityplot()
绘制library(lattice)
example2_3_1 <- read.csv("D:/WorkSpace/R/Statistic_R/utf_8/example/ch2/example2_3_1.csv",encoding="UTF-8",stringsAsFactors = TRUE);example2_3_1
dp1 <- densityplot(~射击环数|运动员, data=example2_3_1, col="blue", cex=0.5, par.strip.text=list(cex=0.6), sub="(a)栅格图")
dp2 <- densityplot(~射击环数, group=运动员, data=example2_3_1, auto.key=list(columns=1,x=0.01,y=0.95,cex=0.6),cex=0.5,sub="(b)比较图")
plot(dp1,split=c(1,1,2,1))
plot(dp2,split=c(2,1,2,1),newpage=F)
sm包
sm.density.compare()
绘制library(sm)
example2_3_1 <- read.csv("D:/WorkSpace/R/Statistic_R/utf_8/example/ch2/example2_3_1.csv",encoding="UTF-8",stringsAsFactors = TRUE);example2_3_1
attach(example2_3_1)
sm.density.compare(射击环数,运动员,lty=1:6,col=1:6)
legend("topleft",legend=levels(运动员),lty=1:6,col=1:6)
barplot()
用宽度相同的条形来表示各类别频数多少的图形
barplot(height, width = 1, space = NULL,
names.arg = NULL, legend.text = NULL, beside = FALSE,
horiz = FALSE, density = NULL, angle = 45,
col = NULL, border = par("fg"),
main = NULL, sub = NULL, xlab = NULL, ylab = NULL,
xlim = NULL, ylim = NULL, xpd = TRUE, log = "",
axes = TRUE, axisnames = TRUE,
cex.axis = par("cex.axis"), cex.names = par("cex.axis"),
inside = TRUE, plot = TRUE, axis.lty = 0, offset = 0,
add = FALSE, ann = !add && par("ann"), args.legend = NULL, ...)
参数 | 描述 |
---|---|
height | 向量、矩阵、数据框、表格 |
xlab=" " | 设置x轴标签 |
ylab=" " | 设置y轴标签 |
horiz=TRUE | 绘制水平条形图 |
col | 设置图形颜色 |
main | 为图形增加主标题 |
sub | 为图形增加副标题 |
ylim=c() | 设置坐标轴的取值范围 |
legend | 设置图例 |
args.legend | 设置图例的位置参数 |
简单条形图(simple bar plot) 是用一个坐标轴表示各类别,另一个坐标轴表示类别频数绘制的条形图
example2_1 <- read.csv("D:/WorkSpace/R/Statistic_R/utf_8/example/ch2/example2_1.csv",encoding="UTF-8")
example2_1
count1 <- table(example2_1$社区)
count2 <- table(example2_1$性别)
count3 <- table(example2_1$态度)
par(mfrow=c(1,3),mai=c(0.7,0.7,0.6,0.1),cex=0.7,cex.main=0.8)
barplot(count1,xlab="频数",ylab="社区",horiz=TRUE,main="(a)水平条形图",col=2:5)
barplot(count2,xlab="性别",ylab="频数",main="(b)垂直条形图")
barplot(count3,xlab="态度",ylab="频数",main="(c)垂直条形图",col=2:3)
帕累托图(Pareto plot)是按各类的频数多少排序绘制的条形图
example2_1 <- read.csv("D:/WorkSpace/R/Statistic_R/utf_8/example/ch2/example2_1.csv",encoding="UTF-8")
example2_1
count1 <- table(example2_1$社区)
par(mai=c(0.7,0.7,0.1,0.8),cex=0.8)
x <- sort(count1, decreasing=T);x
bar <- barplot(x,xlab="社区",ylab="频数",ylim=c(0,1.2*max(count1)),col=2:5)
text(bar,x,labels=x,pos=3)
y <- cumsum(x)/sum(x)
par(new=T)
plot(y,type="b",lwd=1.5,pch=15,axes=FALSE, xlab='', ylab='', main='')
axis(4)
mtext("累积频率",side=4,line=3)
mtext("累积分布曲线",line=-2.5, cex=0.8, adj=0.75)
example2_1 <- read.csv("D:/WorkSpace/R/Statistic_R/utf_8/example/ch2/example2_1.csv",encoding="UTF-8")
example2_1
mytable1 <- table(example2_1$态度,example2_1$社区);mytable1
par(mfrow=c(2,2), cex=0.6)
barplot(mytable1, xlab="社区", ylab="频数", ylim=c(0,16), col=c("green","blue"),legend=rownames(mytable1), args.legend=list(x=12), beside=TRUE, main="(a)社区并列条形图")
barplot(mytable1, xlab="社区", ylab="频数", ylim=c(0,30), col=c("green","blue"),legend=rownames(mytable1), args.legend=list(x=4.8), main="(b)社区堆叠条形图")
mytable2 <- table(example2_1$态度, example2_1$性别); mytable2
barplot(mytable2, xlab="性别", ylab="频数", ylim=c(0,30), col=c("green","blue"),legend=rownames(mytable2), args.legend=list(x=4.5), beside=TRUE, main="(c)性别并列条形图")
barplot(mytable2, xlab="性别", ylab="频数", ylim=c(0,60), col=c("green","blue"),legend=rownames(mytable2), args.legend=list(x=1), main="(d)性别堆叠条形图")
vcd包
spine()
install.packages("vcd")
脊形图(spine plot)是根据各类别的比例绘制的一种条形图
数据框中的变量是 Factor
类型, formula(~
)才有效
读文件时,添加参数 stringsAsFactors = TRUE
library(vcd)
example2_1 <- read.csv("D:/WorkSpace/R/Statistic_R/utf_8/example/ch2/example2_1.csv",encoding="UTF-8",stringsAsFactors = TRUE)
spine(社区~性别,data=example2_1,xlab="性别",ylab="社区",margins=c(4,3.5,1,2.5))
spine(态度~社区,data=example2_1,xlab="社区",ylab="态度",margins=c(4,3.5,1,2.5))
mosaicplot()
mosaicplot(x,~)
参数 | 描述 |
---|---|
x | 列联表 |
~ | 右侧为类别变量,多个类别变量之间用 “+” 连接 |
马赛克图(mosaic plot)图中嵌套矩形的面积正比于单元格的频数
example2_1 <- read.csv("D:/WorkSpace/R/Statistic_R/utf_8/example/ch2/example2_1.csv",encoding="UTF-8",stringsAsFactors = TRUE)
mosaicplot(~性别+社区+态度, data=example2_1,color=2:3,main=" ")
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 | 设置饼图各分区的名称 |
radius | 设定半径(默认为0.8) |
init.angle=90 | 设定从12点位置开始逆时针方向绘制 |
饼图(pie chart)是用圆形及园内扇形的角度来表示数值大小的图形
example2_1 <- read.csv("D:/WorkSpace/R/Statistic_R/utf_8/example/ch2/example2_1.csv",encoding="UTF-8",stringsAsFactors = TRUE)
count1 <- table(example2_1$社区);count1
name <- names(count1)
percent <- prop.table(count1)*100;percent
label1 <- paste(name," ",percent,"%",sep="")
par(pin=c(3,3),mai=c(0.1,0.4,0.1,0.4),cex=0.8)
pie(count1,labels=label1,init.angle=90)
plotrix包
pie3D()
install.packages("plotrix")
library(plotrix)
example2_1 <- read.csv("D:/WorkSpace/R/Statistic_R/utf_8/example/ch2/example2_1.csv",encoding="UTF-8",stringsAsFactors = TRUE)
count1 <- table(example2_1$社区);count1
name <- names(count1)
percent <- prop.table(count1)*100;percent
labs <- paste(name," ",percent,"%",sep="")
pie3D(count1, labels=labs, explode=0.1, labelcex=0.8)
plotrix包
fan.plot()
install.packages("plotrix")
扇形图(fan plot),是将构成中百分比最大的一类绘制成一个扇形区域,而其他各类百分比按大小采用不同的半径绘制出扇形,并叠加在这个最大的扇形上,
从而有利于比较各构成百分比的相对数量和差异
library(plotrix)
example2_1 <- read.csv("D:/WorkSpace/R/Statistic_R/utf_8/example/ch2/example2_1.csv",encoding="UTF-8",stringsAsFactors = TRUE)
count1 <- table(example2_1$社区);count1
name <- names(count1)
percent <- prop.table(count1)*100;percent
labs <- paste(name," ",percent,"%",sep="")
fan.plot(count1, labels=labs, ticks=200, col=c("gray30","gray70","gray50","gray90"))
plot()
散点图(scatter plot) 是将两个变量的各对观测点画在坐标中,并通过各观测点的分布来展示两个变量间的关系
x <- seq(0,25,length=100)
y <- 4+0.5*x+rnorm(100,0,2)
d <- data.frame(x,y);d
plot(d)
polygon(d[chull(d),], col="pink", lty=3, lwd=2)
points(d)
abline(lm(y~x),lwd,col=4)
abline(v=mean(x), h=mean(y), lty=2, col="gray70")
example2_4 <- read.csv("D:/WorkSpace/R/Statistic_R/utf_8/example/ch2/example2_4.csv",encoding="UTF-8",stringsAsFactors = TRUE);example2_4
attach(example2_4)
par(mfcol=c(1,2), mai=c(0.7,0.7,0.3,0.1), cex=0.8, cex.main=0.8)
plot(广告费用,销售收入,main="(a)普通带网格线", type="n")
grid() # 为图形增加网格线
points(广告费用,销售收入,main="(a)普通带网络线")
rug(广告费用,side=1,col=4)
rug(销售收入,side=2,col=4)
plot(广告费用,销售收入,main="(b)带有拟合直线")
abline(lm(销售收入~广告费用,data=example2_4),col="red")
rug(广告费用,side=1,col=4)
rug(销售收入,side=2,col=4)
案例2的示例,在观察两个变量间的关系的同时对每个变量的分布状况进行描述
example2_4 <- read.csv("D:/WorkSpace/R/Statistic_R/utf_8/example/ch2/example2_4.csv",encoding="UTF-8",stringsAsFactors = TRUE);example2_4
attach(example2_4)
par(fig=c(0,0.8,0,0.8), mai=c(0.9,0.9,0.1,0.9))
plot(广告费用,销售收入,xlab="广告费用",ylab="销售费用",cex.lab=0.7,cex.axis=0.7)
abline(lm(销售收入~广告费用,data=example2_4),col="blue")
par(fig=c(0,0.8,0.5,1),new=TRUE)
boxplot(广告费用,horizontal=TRUE,axes=FALSE)
par(fig=c(0.52,1,0,0.9),new=TRUE)
boxplot(销售收入,axes=FALSE)
detach()
重叠散点图(overlay scatter),比较一个变量与其他几个变量之间的关系
example2_4 <- read.csv("D:/WorkSpace/R/Statistic_R/utf_8/example/ch2/example2_4.csv",encoding="UTF-8",stringsAsFactors = TRUE);example2_4
attach(example2_4)
plot(广告费用,销售收入, xlab="", ylab="销售收入")
abline(lm(销售收入~广告费用, data=example2_4))
points(销售网点数,销售收入,pch=2,col="blue")
abline(lm(销售收入~销售网点数,data=example2_4),col="blue")
points(销售人员数,销售收入,pch=3,col="red")
abline(lm(销售收入~销售人员数,data=example2_4),col="red")
legend("bottomright",legend=c("广告费用","销售网点数","销售人员数"),pch=1:3,col=c("black","blue","red"))
detach()
销售收入作为纵轴、把销售网点数、销售人员数及广告费用之间的关系
scatterplot3d包
scatterplot3d()
install.packages("scatterplot3d")
绘制带有二元回归的三维散点图
example2_4 <- read.csv("D:/WorkSpace/R/Statistic_R/utf_8/example/ch2/example2_4.csv",encoding="UTF-8",stringsAsFactors = TRUE);example2_4
attach(example2_4)
library(scatterplot3d)
s3d <- scatterplot3d(销售人员数,销售网点数,销售收入,pch=16,highlight.3d=TRUE,type="h",cex.lab=0.7)
fit <- lm(销售收入~销售人员数+销售网点数) #二元回归平面
s3d$plane3d(fit,col="blue")
detach()
同时比较多个变量两两之间的关系,绘制矩阵散点图(matrix scatter)
plot()
example2_4 <- read.csv("D:/WorkSpace/R/Statistic_R/utf_8/example/ch2/example2_4.csv",encoding="UTF-8",stringsAsFactors = TRUE);example2_4
example2_4 <- example2_4[,2:5];example2_4
plot(example2_4,cex=0.6,gap=0.5)
car包
scatterplotMatrix()
install.packages("car")
scatterplotMatrix(x, smooth = TRUE,
id = FALSE, legend = TRUE, regLine = TRUE,
ellipse = FALSE, var.labels = colnames(x), diagonal = TRUE,
plot.points = TRUE, groups = NULL, by.groups = TRUE,
use = c("complete.obs", "pairwise.complete.obs"), col =
carPalette()[-1], pch = 1:n.groups, cex = par("cex"),
cex.axis = par("cex.axis"), cex.labels = NULL,
cex.main = par("cex.main"), row1attop = TRUE, ...)
参数 | 描述 |
---|---|
x | 矩阵或数据框 |
diagonal | 表示在矩阵对角线上绘制某种图 |
gap | 调整各图之间的间距 |
example2_4 <- read.csv("D:/WorkSpace/R/Statistic_R/utf_8/example/ch2/example2_4.csv",encoding="UTF-8",stringsAsFactors = TRUE);example2_4
attach(example2_4)
library(car)
scatterplotMatrix(~销售收入+销售网点数+销售人员数+广告费用,diagonal = list(method="histogram"),gap=0.5)
detach()
气泡图(bubble plot)3个变量之间的关系
x和y是来自标准正态分布的两个随机变量,气泡大小由第3个变量z的数值决定
n <- 30;
x <- rnorm(n);x
y <- rnorm(n);y
z <- abs(rnorm(n))+5:1;z
plot(x,y,cex=z,col="pink",pch=19)
points(x,y,cex=z)
symbols()
symbols(x,y=NULL,circles,inches=TRUE,...)
参数 | 描述 |
---|---|
x,y | x轴和y轴变量 |
circles | 第三个变量表示的圆的半径向量 |
inches | 半径英寸 |
fg | 圆的颜色 |
bg | 圆的填充颜色 |
text | 气泡增加样本标签或编号 |
example2_4 <- read.csv("D:/WorkSpace/R/Statistic_R/utf_8/example/ch2/example2_4.csv",encoding="UTF-8",stringsAsFactors = TRUE);example2_4
attach(example2_4)
r <- sqrt(销售收入/pi)
symbols(广告费用,销售网点数,circles=r,inches=0.3,fg="white",bg="lightblue",ylab="销售网点数",xlab="广告费用")
text(广告费用,销售网点数,rownames(example2_4),cex=0.6)
mtext("气泡大小=销售收入",line=-2.5,adj=0.1)
detach(example2_4)
matplot()
轮廓图(outline plot)也称平行坐标图或多线图,横轴表示各样本,纵轴表示每个样本的多个变量的数值
example2_5 <- read.csv("D:/WorkSpace/R/Statistic_R/utf_8/example/ch2/example2_5.csv",encoding="UTF-8",stringsAsFactors = TRUE);example2_4
example2_5
par(mai=c(0.7,0.7,0.1,0.1),cex=0.8)
matplot(t(example2_5[,3:10]),type='b',lty=1:7,col=1:7,xlab="消费项目",ylab="支出金额",pch=1,xaxt="n")
axis(side=1,at=1:8,labels=c("食品","衣着","居住","家庭设备用品及服务","医疗保健","交通和通信","教育文化娱乐服务","其他商品和服务"),cex.axis=0.6)
legend(x="topright",legend=example2_5[,2],lty=1:7,col=1:7,text.width=1,cex=0.7)
fmsb包
radarchart()
install.packages("fmsb")
radarchart(df,axistype,seg,maxmin,vlabels,...)
参数 | 描述 |
---|---|
df | 绘图数据,通常是数据框, 数据框的行表示各样本,列为绘图变量 |
axistype | 指定坐标轴类型,取值在0~5之间 默认为0,表示不标出坐标轴刻度 |
seg | 设定坐标轴刻度线数 默认为4条 |
maxmin | maxmin=TRUE , 设定各坐标轴的最小值为所有变量的最小值,最大值为所有变量的最大值 maxmin=FALSE , 表示各坐标轴的最小值为该轴所对应变量的最小值,最大值为该轴所对应变量的最大值 |
vlabels | 用于设定各坐标轴的标题 |
example2_5 <- read.csv("D:/WorkSpace/R/Statistic_R/utf_8/example/ch2/example2_5.csv",encoding="UTF-8",stringsAsFactors = TRUE);example2_4
example2_5
library(fmsb)
radarchart(example2_5[,3:10],axistype=0,seg=4,maxmin=FALSE,vlabels=names(example2_5[,3:10]),pcol=1:7,plwd=1.5)
legend(x="topleft",legend=example2_5[,2],lty=1:7,col=1:7,lwd=1,text.width=0.5,cex=0.7)
stars()
stars(x,full=TRUE,scale=TRUE,key.loc=NULL,draw.segments=FALSE,...)
参数 | 描述 |
---|---|
x | 矩阵或数据框 |
full | full=FALSE 指定绘制上半圆 full=TRUE 默认 |
scale | scale=TRUE ,对每个变量单独标准化后绘制星图 |
key.loc | 数值用于指定标准星图的位置 |
draw.segments | draw.segments=TRUE ,指定绘制出弧形 |
example2_5 <- read.csv("D:/WorkSpace/R/Statistic_R/utf_8/example/ch2/example2_5.csv",encoding="UTF-8",stringsAsFactors = TRUE);example2_4
example2_5
matrix2_5 <- as.matrix(example2_5[,3:10])
rownames(matrix2_5) <- example2_5[,2]
matrix2_5
stars(matrix2_5,key.loc=c(7,2,5),cex=0.8)
stars(t(matrix2_5),full=FALSE,draw.segments=TRUE,key.loc=c(6,2.2,5),cex=0.8)
aplpack包
faces()
install.packages("aplpack")
faces(xy,face.type=1,...)
参数 | 描述 |
---|---|
xy | 为数据矩阵,绘制脸谱图时按矩阵的行变量绘制脸谱,若要对矩阵列变量绘制脸谱图,将矩阵转置 |
face.type | face.type=1 和 face.type=2 可绘制不同形态的彩色脸谱图 |
变量 | 面部特征 |
---|---|
height of face | 脸的高度 |
width of face | 脸的宽度 |
shape of face | 脸的形状 |
height of mouth | 嘴的高度 |
width of mouth | 嘴的宽度 |
curve of smile | 笑容曲线 |
height of eyes | 眼睛高度 |
width of eyes | 眼睛宽度 |
heigth of hair | 头发高度 |
width of hair | 头发宽度 |
styling of hair | 发型 |
height of nose | 鼻子高度 |
width of nose | 鼻子宽度 |
width of ears | 耳朵宽度 |
height of ears | 耳朵高度 |
example2_5 <- read.csv("D:/WorkSpace/R/Statistic_R/utf_8/example/ch2/example2_5.csv",encoding="UTF-8",stringsAsFactors = TRUE);example2_4
example2_5
matrix2_5 <- as.matrix(example2_5[,3:10])
rownames(matrix2_5) <- example2_5[,2]
matrix2_5
library(aplpack)
faces(matrix2_5,nrow.plot=4,ncol.plot=2,face.type=1)
library(aplpack)
faces(t(matrix2_5),nrow.plot=4,ncol.plot=2,face.type=2)
ts()
创建时间序列对象
ts(data,start,...)
参数 | 描述 |
---|---|
data | 向量、矩阵、数据框 |
start | 设定时间序列的起始时间 |
example2_9 <- read.csv("D:/WorkSpace/R/Statistic_R/utf_8/example/ch2/example2_9.csv",encoding="UTF-8",stringsAsFactors = TRUE);example2_9
example2_9
example2_9 <- ts(example2_9,start=2000)
par(mai=c(0.7,0.7,0.1,0.1),cex=0.8)
plot(example2_9[,3],ylim=c(2000,30000),xlab="年份",ylab="居民消费水平",type="n")
grid(col="gray60")
points(example2_9[,3],ylim=c(2000,30000),xlab="年份",ylab="居民消费水平",type="o")
lines(example2_9[,4],type='b',lty=2,col="blue")
legend(x="topleft",legend=c("农村居民消费水平","城镇居民消费水平"),lty=1:2,col=c(1,4),cex=0.8)
DescTools包
Lc()
在有序类别变量的频数分布中,如果将各类别的频数逐级累加,即可得到累积频数分布表. 根据累积频数分布表可以绘制累积频数分布曲线.
洛伦茨曲线(Lorenz curve) 是一种特殊的累积频数分布曲线,是20世纪初由美国统计学家洛伦茨(M.O. Lorenz)根据意大利经济学家帕累托提出的收入分配公式绘制的描述收入或财富分配不平等程度的曲线.
基尼系数(Gini coefficient) 20世纪意大利经济学家基尼(C. Gini)根据洛伦茨曲线给出了衡量收入分配平等程度的指标
基 尼 系 数 = A A + B 基尼系数=\frac{A}{A+B} 基尼系数=A+BA
A:表示实际收入洛伦茨曲线与绝对平均线之间的面积
B:表示实际收入洛伦茨曲线与绝对不平均线之间的面积
基尼系数=0:表示收入绝对平均
基尼系数=1:表示收入绝对不平均
基尼系数越小,表示收入分配越平均
基尼系数越大,表示收入分配越不平均
Lc(x,n,...) # 计算绘制洛伦茨曲线所需的百分比数值
参数 | 描述 |
---|---|
x | 非负的数值向量 |
n | 相对应的频数向量 |
library(DescTools)
example2_10 <- read.csv("D:/WorkSpace/R/Statistic_R/utf_8/example/ch2/example2_10.csv",encoding="UTF-8",stringsAsFactors = TRUE);example2_9
example2_10
Lc(example2_10$组中值,example2_10$人数)
plot(Lc(example2_10$组中值,example2_10$人数),xlab="人数比例",ylab="收入比例",col=4,panel.first=grid(10,10,col="gray70"))
创建示例
set.seed(12345)
n=100
x <- round(rnorm(n,80,6));x
y <- round(2+0.4*x+rnorm(n,50,3)); y
a <- sample(c("管理","会计","金融"),20,replace=T); a
b <- sample(c("男","女"),20,replace=T); b
d <- data.frame(专业=a,性别=b,数学=x,统计学=y); d
library(ggplot2)
g <- ggplot(d)
theme <- theme(plot.title=element_text(size="10"), axis.title=element_text(size=9), axis.text=element_text(size=8),legend.position="none")
p1 <- g+aes(x=专业,fill=性别)+theme+geom_bar()+ggtitle("条形图")
p2 <- g+aes(x=数学)+geom_histogram(fill=3,bins=20)+geom_rug(color=2)+facet_grid(.~性别)+theme+ggtitle("直方图+rug")
p3 <- g+aes(x=专业,y=统计学,fill=专业,color=专业)+geom_violin()+geom_point(color=1)+geom_boxplot(width=0.2,col=1)+theme+ggtitle("小提琴图+箱线图+点图")
p4 <- g+aes(x=数学,y=统计学,fill=性别,color=性别)+geom_point(size=1)+geom_rug()+stat_smooth(method=loess)+theme+ggtitle("散点图+拟合线+rug")
p5 <- g+aes(x=数学)+ geom_density(aes(group=专业,color=专业,fill=专业),adjust=1,alpha=0.5)+theme_bw()+theme(panel.grid=element_blank())+theme+ggtitle("核密度图")
p6 <- g+aes(x=数学,y=统计学)+geom_line(aes(group=性别,color=性别))+theme_bw()+theme(plot.title=element_text(size="10"),axis.title=element_text(size=9),axis.text=element_text(size=8),legend.position=c(0.2,0.7))+ggtitle("线图")
library(gridExtra)
grid.arrange(p1,p2,p3,p4,p5,p6,nrow=2,ncol=3)
ggplot2
绘制由多个部分组成,每部分由特定的函数控制,各个部分之间用 +
连接
ggplot()
用于指定要绘图的数据并初始化图形
aes()
用于指定绘图的坐标轴代表的变量
geom
用于指定要绘制的图形
geom_histogram | 绘制直方图 |
---|---|
geom_point | 绘制点图 |
theme()
用于对图形的控制
theme(plot.title=element_text(size=" ") | 设定图标题的字体大小 |
---|---|
theme(axis.title=element_text(size=" ") | 设定坐标轴标题字体大小 |
theme(axis.text=element_text(size=" ") | 设定坐标轴刻度字体的大小 |
theme(legend.position) | 设定图例的位置 |
text()
axis()
mtext()