数据分布可视化

直方图 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)

R语言频率分布直方图 r语言绘制频率直方图_数据

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软件会画出光滑的曲线

R语言频率分布直方图 r语言绘制频率直方图_直方图_02

密度直方图

案例1

120个数据的销售额

R语言频率分布直方图 r语言绘制频率直方图_数据_03

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))

R语言频率分布直方图 r语言绘制频率直方图_数据_04

轴须线 rug()

轴须线再现了原始数据在x轴上的位置
rug(x) 重现数据x(作图时将数据点在x轴上再现出来)

扰动点(noise) jitter()

观察实际的数据在x轴上的位置
jitter(x) 计算出现数据x个各扰动点

案例2

R语言自带数据集(美国黄石国家公园老忠实间歇喷泉数据集)

R语言频率分布直方图 r语言绘制频率直方图_直方图_05


给出了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)

R语言频率分布直方图 r语言绘制频率直方图_R语言频率分布直方图_06

经验分布 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)))

R语言频率分布直方图 r语言绘制频率直方图_数据_07

QQ图 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);

R语言频率分布直方图 r语言绘制频率直方图_最小值_08

茎叶图 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);

R语言频率分布直方图 r语言绘制频率直方图_R语言频率分布直方图_09


scale = 2 将10个个位数分成两段,0~4为一段,5~9为另一段

stem(x, scale = 2)

R语言频率分布直方图 r语言绘制频率直方图_数据_10


scale = 1/2 将10个个位数分成1/2段,即20个数为一段

stem(x, scale = 0.5)

R语言频率分布直方图 r语言绘制频率直方图_直方图_11

多茎图 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)

R语言频率分布直方图 r语言绘制频率直方图_最小值_12

茎列出五次
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)

R语言频率分布直方图 r语言绘制频率直方图_最小值_13

背靠背茎叶图 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])

R语言频率分布直方图 r语言绘制频率直方图_数据_14

箱线图 boxplot()

箱线图直观简洁地展现数据分布的主要特征.
IQR 四分位差(四分位距)【interquartile rangel】
  表示上四分位与下四分位差 R语言频率分布直方图 r语言绘制频率直方图_数据_15
内围栏(inter fence)
  是与 R语言频率分布直方图 r语言绘制频率直方图_数据_16R语言频率分布直方图 r语言绘制频率直方图_R语言频率分布直方图_17 的距离等于1.5倍四分位差的两个点
下内围栏
R语言频率分布直方图 r语言绘制频率直方图_数据_18
上内围栏
R语言频率分布直方图 r语言绘制频率直方图_R语言频率分布直方图_19
相邻值
  相邻值(adjacent value):找出上下内围栏之间的最大值和最小值(即非离群点的最大值和最小值)
下相邻值
R语言频率分布直方图 r语言绘制频率直方图_R语言频率分布直方图_20
上相邻值
R语言频率分布直方图 r语言绘制频率直方图_R语言频率分布直方图_21
触须
  表示数据的散布范围, 用直线将上下相邻值分别与箱子连接
离群点(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);

R语言频率分布直方图 r语言绘制频率直方图_R语言频率分布直方图_22

三种使用形式:

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))

R语言频率分布直方图 r语言绘制频率直方图_最小值_23

boxplot(formula, data = NULL, ..., subset, na.action=NULL)

参数

描述

formula

是公式,如 y ~ grp

y是由数据构成的数值型向量

grp 是数据的分组,通常是因子

data

数据结构

案例1

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)

R语言频率分布直方图 r语言绘制频率直方图_直方图_24

案例2

120个数据的销售额

R语言频率分布直方图 r语言绘制频率直方图_数据_03

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)

R语言频率分布直方图 r语言绘制频率直方图_最小值_26

案例3

射击选手的射击环数

R语言频率分布直方图 r语言绘制频率直方图_数据_27

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)

R语言频率分布直方图 r语言绘制频率直方图_数据_28

五数总括 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)

R语言频率分布直方图 r语言绘制频率直方图_数据_29

小提琴图 vioplot包 vioplot()

小提琴图(violin plot) 将分布的核密度估计曲线与箱线图结合在一起,它在箱线图上以镜像方式叠加一条核密度估计曲线。
核密度估计曲线可以看出数据分布的大致形状

vioplot(x, range=1.5, names, horizontal=FALSE,...)

参数

描述

range

默认 range=1.5

确定1.5倍的四分位差为上下内围栏

names

数据的标签或标签向量

install.packages("vioplot")

:射击选手的射击环数

R语言频率分布直方图 r语言绘制频率直方图_数据_27

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])

R语言频率分布直方图 r语言绘制频率直方图_R语言频率分布直方图_31

点图(Cleveland 克利夫兰点图)

点图(dot plot) 也称 Cleveland 克利夫兰点图
将数据用点绘制在图中,是检测数据离散点的有效工具

R语言频率分布直方图 r语言绘制频率直方图_数据_27


将如上数据重新进行组装

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")

R语言频率分布直方图 r语言绘制频率直方图_直方图_33

点图 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)

R语言频率分布直方图 r语言绘制频率直方图_直方图_34

案例1:

1970年美国各类型车每加仑汽油行驶里程

R语言频率分布直方图 r语言绘制频率直方图_数据_35

dotchart(mtcars$mpg,labels = row.names(mtcars),cex = .7,
         main="Gas Mileage for Car Models",
         xlab = "Miles Per Gallon")

R语言频率分布直方图 r语言绘制频率直方图_直方图_36

案例2:

1970年美国各类型车每加仑汽油行驶里程

R语言频率分布直方图 r语言绘制频率直方图_最小值_37

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")

R语言频率分布直方图 r语言绘制频率直方图_最小值_38

lattice包 dotplot()

install.packages("lattice")

R语言频率分布直方图 r语言绘制频率直方图_直方图_33

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)

R语言频率分布直方图 r语言绘制频率直方图_R语言频率分布直方图_40

核密度图

核密度估计(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")

R语言频率分布直方图 r语言绘制频率直方图_R语言频率分布直方图_41

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)

R语言频率分布直方图 r语言绘制频率直方图_数据_42

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)

R语言频率分布直方图 r语言绘制频率直方图_数据_43

类别数据可视化

条形图 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) 是用一个坐标轴表示各类别,另一个坐标轴表示类别频数绘制的条形图

R语言频率分布直方图 r语言绘制频率直方图_最小值_44

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)

R语言频率分布直方图 r语言绘制频率直方图_最小值_45

帕累托图

帕累托图(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)

R语言频率分布直方图 r语言绘制频率直方图_直方图_46

复式条形图(并列条形图/堆叠条形图)

  1. 使用二维列联表数据
  2. R语言频率分布直方图 r语言绘制频率直方图_直方图_47

  3. 通过 beside 参数控制是并列条形图(beside=TRUE)还是堆叠条形图
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)性别堆叠条形图")

R语言频率分布直方图 r语言绘制频率直方图_数据_48

脊形图 vcd包 spine()

install.packages("vcd")

脊形图(spine plot)是根据各类别的比例绘制的一种条形图

R语言频率分布直方图 r语言绘制频率直方图_最小值_49


数据框中的变量是 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))

R语言频率分布直方图 r语言绘制频率直方图_直方图_50

spine(态度~社区,data=example2_1,xlab="社区",ylab="态度",margins=c(4,3.5,1,2.5))

R语言频率分布直方图 r语言绘制频率直方图_R语言频率分布直方图_51

马赛克图 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=" ")

R语言频率分布直方图 r语言绘制频率直方图_直方图_52

饼图 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)是用圆形及园内扇形的角度来表示数值大小的图形

R语言频率分布直方图 r语言绘制频率直方图_最小值_44

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)

R语言频率分布直方图 r语言绘制频率直方图_数据_54

三维饼图 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)

R语言频率分布直方图 r语言绘制频率直方图_数据_55

扇形图 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"))

R语言频率分布直方图 r语言绘制频率直方图_数据_56

变量间关系可视化

散点图 plot()

散点图(scatter plot) 是将两个变量的各对观测点画在坐标中,并通过各观测点的分布来展示两个变量间的关系

案例1

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")

R语言频率分布直方图 r语言绘制频率直方图_R语言频率分布直方图_57

案例2

20家企业销售收入、销售网点数、销售人员、广告费用

R语言频率分布直方图 r语言绘制频率直方图_直方图_58

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)

R语言频率分布直方图 r语言绘制频率直方图_R语言频率分布直方图_59

案例3

案例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()

R语言频率分布直方图 r语言绘制频率直方图_数据_60

重叠散点图

重叠散点图(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()

销售收入作为纵轴、把销售网点数、销售人员数及广告费用之间的关系

R语言频率分布直方图 r语言绘制频率直方图_R语言频率分布直方图_61

三维散点图 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()

R语言频率分布直方图 r语言绘制频率直方图_R语言频率分布直方图_62

矩形散点图

同时比较多个变量两两之间的关系,绘制矩阵散点图(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)

R语言频率分布直方图 r语言绘制频率直方图_数据_63

带有拟合直线、最佳拟合曲线和直方图的矩阵散点图 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()

R语言频率分布直方图 r语言绘制频率直方图_最小值_64

气泡图

气泡图(bubble plot)3个变量之间的关系

案例1

x和y是来自标准正态分布的两个随机变量,气泡大小由第3个变量z的数值决定

R语言频率分布直方图 r语言绘制频率直方图_直方图_65

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)

R语言频率分布直方图 r语言绘制频率直方图_R语言频率分布直方图_66

案例2 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)

销售收入、广告费用、销售网点数3个变量关系

R语言频率分布直方图 r语言绘制频率直方图_最小值_67

比较多样本相似性图形

轮廓图 matplot()

轮廓图(outline plot)也称平行坐标图或多线图,横轴表示各样本,纵轴表示每个样本的多个变量的数值

R语言频率分布直方图 r语言绘制频率直方图_数据_68


R语言频率分布直方图 r语言绘制频率直方图_数据_69

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)

R语言频率分布直方图 r语言绘制频率直方图_直方图_70

雷达图 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)

R语言频率分布直方图 r语言绘制频率直方图_最小值_71

星图 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

R语言频率分布直方图 r语言绘制频率直方图_直方图_72


绘制不同收入等级的星图

stars(matrix2_5,key.loc=c(7,2,5),cex=0.8)

R语言频率分布直方图 r语言绘制频率直方图_数据_73


绘制不同消费项目的星图

stars(t(matrix2_5),full=FALSE,draw.segments=TRUE,key.loc=c(6,2.2,5),cex=0.8)

R语言频率分布直方图 r语言绘制频率直方图_最小值_74

脸谱图 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

R语言频率分布直方图 r语言绘制频率直方图_R语言频率分布直方图_75

library(aplpack)
faces(matrix2_5,nrow.plot=4,ncol.plot=2,face.type=1)

R语言频率分布直方图 r语言绘制频率直方图_R语言频率分布直方图_76

R语言频率分布直方图 r语言绘制频率直方图_数据_77

library(aplpack)
faces(t(matrix2_5),nrow.plot=4,ncol.plot=2,face.type=2)

R语言频率分布直方图 r语言绘制频率直方图_直方图_78

R语言频率分布直方图 r语言绘制频率直方图_最小值_79

时间序列图 ts()

创建时间序列对象

ts(data,start,...)

参数

描述

data

向量、矩阵、数据框

start

设定时间序列的起始时间

R语言频率分布直方图 r语言绘制频率直方图_最小值_80

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)

R语言频率分布直方图 r语言绘制频率直方图_R语言频率分布直方图_81

洛伦茨曲线 DescTools包 Lc()

在有序类别变量的频数分布中,如果将各类别的频数逐级累加,即可得到累积频数分布表. 根据累积频数分布表可以绘制累积频数分布曲线.

洛伦茨曲线(Lorenz curve) 是一种特殊的累积频数分布曲线,是20世纪初由美国统计学家洛伦茨(M.O. Lorenz)根据意大利经济学家帕累托提出的收入分配公式绘制的描述收入或财富分配不平等程度的曲线.

R语言频率分布直方图 r语言绘制频率直方图_数据_82

基尼系数(Gini coefficient) 20世纪意大利经济学家基尼(C. Gini)根据洛伦茨曲线给出了衡量收入分配平等程度的指标
R语言频率分布直方图 r语言绘制频率直方图_R语言频率分布直方图_83
A:表示实际收入洛伦茨曲线与绝对平均线之间的面积
B:表示实际收入洛伦茨曲线与绝对不平均线之间的面积

基尼系数=0:表示收入绝对平均
基尼系数=1:表示收入绝对不平均
基尼系数越小,表示收入分配越平均
基尼系数越大,表示收入分配越不平均

Lc(x,n,...) # 计算绘制洛伦茨曲线所需的百分比数值

参数

描述

x

非负的数值向量

n

相对应的频数向量

例:某企业年收入分组数据

R语言频率分布直方图 r语言绘制频率直方图_直方图_84

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$人数)

R语言频率分布直方图 r语言绘制频率直方图_R语言频率分布直方图_85

plot(Lc(example2_10$组中值,example2_10$人数),xlab="人数比例",ylab="收入比例",col=4,panel.first=grid(10,10,col="gray70"))

R语言频率分布直方图 r语言绘制频率直方图_R语言频率分布直方图_86

ggplot2 绘图示例

创建示例

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

R语言频率分布直方图 r语言绘制频率直方图_直方图_87

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)

设定图例的位置

R语言频率分布直方图 r语言绘制频率直方图_最小值_88

text()
axis()
mtext()