0.1 图形的控制和布局:par函数、layout函数

0.1.1 绘制2行2列的图形矩阵,第2行为一个图

layout(matrix(c(1,2,3,3),nrow=2,ncol=2),widths=c(2,1))#布局绘图环境
par(mai=c(0.6,0.6,0.1,0.1),cex=0.7)#设置图形的边距、文字和绘图符号大小
x<-rnorm(5000) #生成5000个标准正态分布的随机数
y<-rchisq(5000,10)#生成5000个卡方分布的随机数
hist(x,prob=TRUE,col="lightblue",xlab="x",ylab="Density",
ylim=c(0,0.4),main="") #绘制x直方图
hist(y,prob=TRUE,col="pink",xlab="y",ylab="Density",main="")#绘制y直方图
boxplot(x,col='red',lwd=1)#绘制x的箱线图

0.1.2 绘制2行2列的图形矩阵,第2行为一个图

layout(matrix(c(1,2,3,3),nrow=2,ncol=2,byrow=TRUE),heights=c(2,1))#布局绘图环境
par(mai=c(0.6,0.6,0.1,0.1),cex=0.7)#设置图形的边距、文字和绘图符号大小
x<-rnorm(5000) #生成5000个标准正态分布的随机数
y<-rchisq(5000,10)#生成5000个卡方分布的随机数
hist(x,prob=TRUE,col="lightblue",xlab="x",ylab="Density",ylim=c(0,0.4),main="") #绘制x直方图
plot(x,y,xlab="x",ylab="y") #绘制y直方图
boxplot(y,col="red",lwd=1,horizontal = TRUE)#绘制y箱线图

0.2 数据的频数分布图

load('D:\\New_Folder\\Study_Programming\\R_Programme\\Applied Statistics\\datas - Copy\\example\\ch2\\example2_1.RData')

0.2.1 一维列联表

summary(example2_1) #遇到类别变量时,产生频数分布表;遇到数值变量时,产生概括性统计量。
##     社区    性别      态度   
##  A社区:27   男:36   反对:31  
##  B社区:17   女:44   赞成:49  
##  C社区:21                    
##  D社区:15
    #生成被调查者所属社区的频数分布表,并将频数分布表转化为百分比表
count1<-table(example2_1$社区)
count1
## 
## A社区 B社区 C社区 D社区 
##    27    17    21    15
prop.table(count1)*100
## 
## A社区 B社区 C社区 D社区 
## 33.75 21.25 26.25 18.75

0.2.2 二维列联表

    #生成被调查者所属社区与态度的列联表,为列联表增加边际和,并将列联表转化为百分比表。
mytable2<-table(example2_1$社区,example2_1$态度)
addmargins(mytable2)
##        
##         反对 赞成 Sum
##   A社区   13   14  27
##   B社区    5   12  17
##   C社区    7   14  21
##   D社区    6    9  15
##   Sum     31   49  80
addmargins(prop.table(mytable2))*100
##        
##           反对   赞成    Sum
##   A社区  16.25  17.50  33.75
##   B社区   6.25  15.00  21.25
##   C社区   8.75  17.50  26.25
##   D社区   7.50  11.25  18.75
##   Sum    38.75  61.25 100.00
    #使用crosstable函数生成二维列联表,并对其进行百分比的分析
library(gmodels)
CrossTable(example2_1$性别,example2_1$态度)
## 
##  
##    Cell Contents
## |-------------------------|
## |                       N |
## | Chi-square contribution |
## |           N / Row Total |
## |           N / Col Total |
## |         N / Table Total |
## |-------------------------|
## 
##  
## Total Observations in Table:  80 
## 
##  
##               | example2_1$态度 
## example2_1$性别 |      反对 |      赞成 | Row Total | 
## --------------|-----------|-----------|-----------|
##            男 |        14 |        22 |        36 | 
##               |     0.000 |     0.000 |           | 
##               |     0.389 |     0.611 |     0.450 | 
##               |     0.452 |     0.449 |           | 
##               |     0.175 |     0.275 |           | 
## --------------|-----------|-----------|-----------|
##            女 |        17 |        27 |        44 | 
##               |     0.000 |     0.000 |           | 
##               |     0.386 |     0.614 |     0.550 | 
##               |     0.548 |     0.551 |           | 
##               |     0.212 |     0.338 |           | 
## --------------|-----------|-----------|-----------|
##  Column Total |        31 |        49 |        80 | 
##               |     0.388 |     0.613 |           | 
## --------------|-----------|-----------|-----------|
## 
## 

0.2.3 多维列联表

    #生成行变量为被调查者性别和态度,列变量为社区的三维列联表
mytable2<-ftable(example2_1,row.vars = c("性别","态度"),col.vars = "社区")
mytable2
##           社区 A社区 B社区 C社区 D社区
## 性别 态度                             
## 男   反对          4     3     5     2
##      赞成          5     7     8     2
## 女   反对          9     2     2     4
##      赞成          9     5     6     7
    #为列联表mytable2增加边际和
ftable(addmargins(table(example2_1$性别,example2_1$态度,example2_1$社区)))
##           A社区 B社区 C社区 D社区 Sum
##                                      
## 男  反对      4     3     5     2  14
##     赞成      5     7     8     2  22
##     Sum       9    10    13     4  36
## 女  反对      9     2     2     4  17
##     赞成      9     5     6     7  27
##     Sum      18     7     8    11  44
## Sum 反对     13     5     7     6  31
##     赞成     14    12    14     9  49
##     Sum      27    17    21    15  80
    #将列联表mytable2转化为百分比表
ftable(addmargins(prop.table(table(example2_1$性别,example2_1$态度,example2_1$社区)))*100)
##            A社区  B社区  C社区  D社区    Sum
##                                             
## 男  反对    5.00   3.75   6.25   2.50  17.50
##     赞成    6.25   8.75  10.00   2.50  27.50
##     Sum    11.25  12.50  16.25   5.00  45.00
## 女  反对   11.25   2.50   2.50   5.00  21.25
##     赞成   11.25   6.25   7.50   8.75  33.75
##     Sum    22.50   8.75  10.00  13.75  55.00
## Sum 反对   16.25   6.25   8.75   7.50  38.75
##     赞成   17.50  15.00  17.50  11.25  61.25
##     Sum    33.75  21.25  26.25  18.75 100.00

0.2.4 数值数据的类别化

    #生成一张频数分布表,并计算各组频数的百分比和累计百分比。  
load("D:\\New_Folder\\Study_Programming\\R_Programme\\Applied Statistics\\datas - Copy\\example\\ch2\\example2_2.RData")
vector2_2<-as.vector(example2_2$销售额)
d<-table(cut(vector2_2,breaks=10*(16:28),right=FALSE))#break为要分的组数,break=10*(5:10)表示将50~100之间的数据分成间隔为10的组。
df<-data.frame(d)
percent<-df$Freq/sum(df$Freq)*100
cumsump<-cumsum(percent)
mytable<-data.frame(d,percent,cumsump)
mytable
##         Var1 Freq    percent    cumsump
## 1  [160,170)    2  1.6666667   1.666667
## 2  [170,180)    4  3.3333333   5.000000
## 3  [180,190)    7  5.8333333  10.833333
## 4  [190,200)   17 14.1666667  25.000000
## 5  [200,210)   27 22.5000000  47.500000
## 6  [210,220)   20 16.6666667  64.166667
## 7  [220,230)   16 13.3333333  77.500000
## 8  [230,240)   13 10.8333333  88.333333
## 9  [240,250)    7  5.8333333  94.166667
## 10 [250,260)    4  3.3333333  97.500000
## 11 [260,270)    2  1.6666667  99.166667
## 12 [270,280)    1  0.8333333 100.000000

0.3 类别数据的可视化

0.3.1 条形图及其变种:简单条形图、复式条形图、帕累托图、脊形图、马赛克图

0.3.1.1 脊形图: 根据各类别的比例绘制的一种条形图,条的宽度与观测频数成正比。

library(vcd) 
## Loading required package: grid
spine(社区~性别,data=example2_1,xlab="性别",ylab="社区",margins=c(4,3.5,1,2.5))

#### 马克图(适用于两个以上变量)

mosaicplot(~性别+社区+态度,data=example2_1,col=2:3,main="")

0.4 数值数据的可视化

0.4.1 展示数据分布的图形:直方图、茎叶图、箱线图、小提琴图、点图、核密度图、

0.4.1.1 直方图:用矩阵的宽度和高度来表示频数分布

par(mai=c(0.6,0.6,0.4,0.1),cex=0.7)
hist(example2_2$销售额,prob=TRUE,breaks=20,xlab="销售额",ylab="密度",col="lightblue",main="增加轴须线和核密度曲线")
rug(example2_2$销售额)
lines(density(example2_2$销售额),col="red")

# 直方图函数hist(x,breaks=“n”)参数breaks=设定组数;probability=TRUE绘制纵轴为密度的直方图;
# 函数lines(density(x))为直方图增加核密度曲线。
# rug(x)重现数据x

0.4.1.2 茎叶图:茎叶图不仅可以反映数据的分布特征,还可以保留原始数据的信息。本节是绘制背靠背茎叶图

stem(example2_2$销售额)
## 
##   The decimal point is 1 digit(s) to the right of the |
## 
##   16 | 17
##   17 | 1222
##   18 | 1136788
##   19 | 11234566667889999
##   20 | 000012333334455566677778899
##   21 | 00224556666777788889
##   22 | 0222344445556689
##   23 | 0334455678889
##   24 | 0133368
##   25 | 2234
##   26 | 15
##   27 | 2
library(aplpack)
stem.leaf(example2_2$销售额,1,2)
## 1 | 2: represents 12
##  leaf unit: 1
##             n: 120
##    1    16* | 1
##    2    16. | 7
##    6    17* | 1222
##         17. | 
##    9    18* | 113
##   13    18. | 6788
##   18    19* | 11234
##   30    19. | 566667889999
##   43    20* | 0000123333344
##   57    20. | 55566677778899
##   (5)   21* | 00224
##   58    21. | 556666777788889
##   43    22* | 022234444
##   34    22. | 5556689
##   27    23* | 03344
##   22    23. | 55678889
##   14    24* | 01333
##    9    24. | 68
##    7    25* | 2234
##         25. | 
##    3    26* | 1
##    2    26. | 5
##    1    27* | 2
stem.leaf.backback(example2_2$销售额[1:60],example2_2$销售额[61:120])
## ________________________________________________________
##   1 | 2: represents 12, leaf unit: 1 
##      example2_2$销售额[1:60]      example2_2$销售额[61:120]
## ________________________________________________________
##     2                  71| 16 |                         
##     5                 221| 17 |2                    1   
##     9                8731| 18 |168                  4   
##    23      99988766654321| 19 |169                  7   
##   (14)     88743333210000| 20 |3455566677799       20   
##    23                 862| 21 |00245566677778889  (17)  
##    20               55442| 22 |02234456689         23   
##    15               98654| 23 |03345788            12   
##    10               63310| 24 |38                   4   
##     5                 422| 25 |3                    2   
##     2                   1| 26 |5                    1   
##     1                   2| 27 |                         
## ________________________________________________________
## n:                     60      60                   
## ________________________________________________________

0.4.1.3 箱线图:不仅可以反映一组数据分布特征,显示是否存在离群点,还可以对多组数据的分布特征进行比较

内围栏:是与两个四分位数的距离等于1.5倍四分位差的两个点。
相邻值: 上下内围栏之间的最大值和最小值称为相邻值。
须线:用直线将上下相邻值分别与箱子连接称为须线。

par(mfrow=c(3,1),mai=c(0.4,0.2,0.3,0.2))
x<-rnorm(1000.50,5)
boxplot(x,range=1.5,col="red",horizontal = TRUE,main="相邻值与箱子连线的箱线图(range=1.5) ",cex=0.8)
boxplot(x,range=3,col="red",horizontal = TRUE,main="相邻值与箱子连线的箱线图(range=1.5) ",cex=0.8)
boxplot(x,range=0,varwidth=T,col="pink",horizontal = TRUE,main="极值与箱子连线的箱线图(range=0,varwidth=T) ",cex=0.8)

# range=1.5设定1.5倍的四分位差为内栏
# range=0将极值与箱子连线; varwidth=FALSE所有箱子宽度都一样。varwidth=TRUE箱子的宽度与样本量的平方根成正比
# horizontal=TRUE将箱线图横放。

0.4.2 展示变量之间的关系:散点图、气泡图

load("D:\\New_Folder\\Study_Programming\\R_Programme\\Applied Statistics\\datas - Copy\\example\\ch2\\example2_4.RData")
attach(example2_4)
par(fig=c(0,0.8,0,0.8),mai=c(0.9,0.9,0.1,0.1))
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.55,1),new=TRUE)
boxplot(广告费用,horizontal = TRUE,axes=FALSE)
par(fig=c(0.52,1,0,0.9),new=TRUE)
boxplot(销售收入,axes=FALSE)

plot(example2_4,cex=0.6,gap=0.5)#gap用于调整各图之间的间距

library(car)
## Loading required package: carData
scatterplotMatrix(~销售收入+销售网点数+销售人员数+广告费用,diagonal='histogram',gap=0.5)
## Warning in applyDefaults(diagonal, defaults = list(method =
## "adaptiveDensity"), : unnamed diag arguments, will be ignored

0.4.3 比较多样本相似性的图形:轮廓图、雷达图、星图、脸谱图

load("D:\\New_Folder\\Study_Programming\\R_Programme\\Applied Statistics\\datas - Copy\\example\\ch2\\example2_5.RData")
library(fmsb)
## 
## Attaching package: 'fmsb'
## The following object is masked from 'package:vcd':
## 
##     oddsratio
radarchart(example2_5[,2:9],axistype=0,seg=4,maxmin=FALSE,vlabels=names(example2_5[,2:9]),pcol=1:7,plwd = 1.5)
legend(x="topleft",legend=c("最低收入户","低收入户","中等偏下户","中等收入下户","中等偏上户","高收入户","最高收入户"),lty=1:7,col=1:7,lwd=1,text.width=0.5,cex=0.7)

0.4.4 时间序列图

0.5 洛伦兹曲线

0.6 ggplot2 绘图