R语言--(9)--数据可视化

数据分布可视化

直方图 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语言--(9)--数据可视化_第1张图片

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语言--(9)--数据可视化_第2张图片

密度直方图

案例1

120个数据的销售额
R语言--(9)--数据可视化_第3张图片

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语言--(9)--数据可视化_第4张图片

轴须线 rug()

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

扰动点(noise) jitter()

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

案例2

R语言自带数据集(美国黄石国家公园老忠实间歇喷泉数据集)
R语言--(9)--数据可视化_第5张图片
给出了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语言--(9)--数据可视化_第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)))

R语言--(9)--数据可视化_第7张图片

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语言--(9)--数据可视化_第8张图片

茎叶图 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语言--(9)--数据可视化_第9张图片
scale = 2 将10个个位数分成两段,0~4为一段,5~9为另一段

stem(x, scale = 2)

R语言--(9)--数据可视化_第10张图片
scale = 1/2 将10个个位数分成1/2段,即20个数为一段

stem(x, scale = 0.5)

R语言--(9)--数据可视化_第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语言--(9)--数据可视化_第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语言--(9)--数据可视化_第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语言--(9)--数据可视化_第14张图片

箱线图 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);

R语言--(9)--数据可视化_第15张图片

三种使用形式:

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语言--(9)--数据可视化_第16张图片

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语言--(9)--数据可视化_第17张图片

案例2

120个数据的销售额
R语言--(9)--数据可视化_第18张图片

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语言--(9)--数据可视化_第19张图片

案例3

射击选手的射击环数
R语言--(9)--数据可视化_第20张图片

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语言--(9)--数据可视化_第21张图片

五数总括 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语言--(9)--数据可视化_第22张图片

小提琴图 vioplot包 vioplot()

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

vioplot(x, range=1.5, names, horizontal=FALSE,...)
参数 描述
range 默认 range=1.5
确定1.5倍的四分位差为上下内围栏
names 数据的标签或标签向量
install.packages("vioplot")

:射击选手的射击环数
R语言--(9)--数据可视化_第23张图片

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语言--(9)--数据可视化_第24张图片

点图(Cleveland 克利夫兰点图)

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

R语言--(9)--数据可视化_第25张图片
将如上数据重新进行组装

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语言--(9)--数据可视化_第26张图片

点图 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语言--(9)--数据可视化_第27张图片

案例1:

1970年美国各类型车每加仑汽油行驶里程
R语言--(9)--数据可视化_第28张图片

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

R语言--(9)--数据可视化_第29张图片

案例2:

1970年美国各类型车每加仑汽油行驶里程
R语言--(9)--数据可视化_第30张图片

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语言--(9)--数据可视化_第31张图片

lattice包 dotplot()

install.packages("lattice")

R语言--(9)--数据可视化_第32张图片

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语言--(9)--数据可视化_第33张图片

核密度图

核密度估计(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语言--(9)--数据可视化_第34张图片

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语言--(9)--数据可视化_第35张图片

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语言--(9)--数据可视化_第36张图片

类别数据可视化

条形图 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语言--(9)--数据可视化_第37张图片

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语言--(9)--数据可视化_第38张图片

帕累托图

帕累托图(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语言--(9)--数据可视化_第39张图片

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

  1. 使用二维列联表数据
    R语言--(9)--数据可视化_第40张图片

  2. 通过 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语言--(9)--数据可视化_第41张图片

脊形图 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))

R语言--(9)--数据可视化_第42张图片

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

R语言--(9)--数据可视化_第43张图片

马赛克图 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语言--(9)--数据可视化_第44张图片

饼图 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语言--(9)--数据可视化_第45张图片

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语言--(9)--数据可视化_第46张图片

三维饼图 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语言--(9)--数据可视化_第47张图片

扇形图 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语言--(9)--数据可视化_第48张图片

变量间关系可视化

散点图 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语言--(9)--数据可视化_第49张图片

案例2

20家企业销售收入、销售网点数、销售人员、广告费用
R语言--(9)--数据可视化_第50张图片

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语言--(9)--数据可视化_第51张图片

案例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语言--(9)--数据可视化_第52张图片

重叠散点图

重叠散点图(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语言--(9)--数据可视化_第53张图片

三维散点图 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语言--(9)--数据可视化_第54张图片

矩形散点图

同时比较多个变量两两之间的关系,绘制矩阵散点图(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语言--(9)--数据可视化_第55张图片

带有拟合直线、最佳拟合曲线和直方图的矩阵散点图 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语言--(9)--数据可视化_第56张图片

气泡图

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

案例1

x和y是来自标准正态分布的两个随机变量,气泡大小由第3个变量z的数值决定
R语言--(9)--数据可视化_第57张图片

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语言--(9)--数据可视化_第58张图片

案例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语言--(9)--数据可视化_第59张图片

比较多样本相似性图形

轮廓图 matplot()

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


R语言--(9)--数据可视化_第60张图片
R语言--(9)--数据可视化_第61张图片

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语言--(9)--数据可视化_第62张图片

雷达图 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语言--(9)--数据可视化_第63张图片

星图 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语言--(9)--数据可视化_第64张图片
绘制不同收入等级的星图

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

R语言--(9)--数据可视化_第65张图片
绘制不同消费项目的星图

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

R语言--(9)--数据可视化_第66张图片

脸谱图 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语言--(9)--数据可视化_第67张图片

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

R语言--(9)--数据可视化_第68张图片

R语言--(9)--数据可视化_第69张图片

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

R语言--(9)--数据可视化_第70张图片

R语言--(9)--数据可视化_第71张图片

时间序列图 ts()

创建时间序列对象

ts(data,start,...)
参数 描述
data 向量、矩阵、数据框
start 设定时间序列的起始时间

R语言--(9)--数据可视化_第72张图片

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语言--(9)--数据可视化_第73张图片

洛伦茨曲线 DescTools包 Lc()

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

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

基尼系数(Gini coefficient) 20世纪意大利经济学家基尼(C. Gini)根据洛伦茨曲线给出了衡量收入分配平等程度的指标
基 尼 系 数 = A A + B 基尼系数=\frac{A}{A+B} =A+BA
A:表示实际收入洛伦茨曲线与绝对平均线之间的面积
B:表示实际收入洛伦茨曲线与绝对不平均线之间的面积

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

Lc(x,n,...) # 计算绘制洛伦茨曲线所需的百分比数值
参数 描述
x 非负的数值向量
n 相对应的频数向量

例:某企业年收入分组数据
R语言--(9)--数据可视化_第75张图片

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语言--(9)--数据可视化_第76张图片

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

R语言--(9)--数据可视化_第77张图片

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语言--(9)--数据可视化_第78张图片

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语言--(9)--数据可视化_第79张图片

text()
axis()
mtext()

你可能感兴趣的:(R)