文章目录
  1. 基本图形
    1. 1、条形图
      1. (1)简单的条形图
      2. (2)堆砌条形图和分组条形图
      3. (3)均值条形图
      4. (4)微调柱状图
      5. (5)棘状图
    2. 2、饼图
      1. (1)饼图(表达信息能力弱,不推荐)
      2. (2)折叠扇图
    3. 3、直方图
    4. 4、核密度图
    5. 5、箱线图
      1. (1)并列箱线图跨组比较
      2. (2)小提琴图
    6. 6、点图

基本图形

1、条形图

安装包install.packages("vcd")

安装包包含测试数据Arthritis,以及用户荆棘图组件spinogram

(1)简单的条形图

1
2
3
4
5
6
library("vcd")
counts=table(Arthritis$Improved)
#简单条形图
barplot(counts,main="Simple Bar",xlab="Improvement",ylab="Count")
#水平条形图
barplot(counts,main="Simple Bar",xlab="Improvement",ylab="Count",horiz = TRUE)


如果要绘制的类别型变量是一个因子或有序型因子,就可以使用函数plot()快速创建一幅垂直条形图。

(2)堆砌条形图和分组条形图

1
2
3
4
5
6
7
count<-table(Arthritis$Improved, Arthritis$Treatment)
#堆砌柱状图
barplot(count,main="Stacked Bar Plot", xlab="Treatment", ylab="Frequency", col=c("red","yellow","green"))
#用于调整不合适的图例位置,xpd表示可以在图外绘制
legend(x=2,y=50,rownames(count),pch=c(15,15,15),col=c("red","yellow","green"),horiz = FALSE,xpd=TRUE);
#分组柱状图
barplot(count,main="Stacked Bar Plot", xlab="Treatment", ylab="Frequency", col=c("red","yellow","green"),legend=rownames(count), beside=TRUE)


(3)均值条形图

1
2
3
4
5
6
7
8
states<-data.frame(state.region,state.x77)
means<-aggregate(states$Illiteracy, by=list(state.region), FUN=mean)
means<-means[order(means$x),]
bar<-barplot(means$x,names.arg = means$Group.1)
#lines()可以加线,注意x=bar,不可以x= means$Group.1,原因是lines会使用不同的比例画线
#而bar则返回柱状图真正的x轴值
lines(x=bar,y=means$x,type="b",pch=22,col="red",lty=3)

(4)微调柱状图

1
2
3
4
5
6
par(mar=c(5,8,4,2))
par(las=2)
counts=table(Arthritis$Improved)
# cex.names = 0.8字体比例
barplot(counts,main="Treatment Outcome",horiz = TRUE,cex.names = 0.8,
names.arg = c("No Improvement","Some Improvement","Marked Improvement"))

(5)棘状图

棘状图对堆砌条形图进行了重缩放,这样每个条形的高度均为1,每一段的高度即表示比例。棘状图可由vcd包中的函数spine()绘制

1
2
3
4
5
6
#棘状图
library(vcd)
attach(Arthritis)
counts<-table(Treatment, Improved)
spine(counts, main="Spinogram Example")
detach(Arthritis)

2、饼图

(1)饼图(表达信息能力弱,不推荐)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#饼图
par(mfrow=c(2,2))
slices <- c(10,12,4,16,8)
lbls<-c("US","UK","Australia","Germany","France")
pie(slices,labels = lbls,main="Simple Pie Chart")
pct<-round(slices/sum(slices)*100)
lbls2<-paste(lbls, " ",pct,"%",sep="")
pie(slices, labels = lbls2,col=rainbow(length(lbls2)),main="Pie Chart with Percentages")
library(plotrix)
pie3D(slices, labels=lbls, explode=0.1, main="3D Pie")
mytable<-table(state.region)
lbls3<-paste(names(mytable),"\n",mytable, sep="")
pie(mytable, labels = lbls3,main="Pie Chart from a Table")

(2)折叠扇图

1
2
3
4
5
#折叠扇形
library(plotrix)
slices <- c(10,12,4,16,8)
lbls<-c("US","UK","Australia","Germany","France")
fan.plot(slices,labels = lbls,main="Simple Pie Chart")

3、直方图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#直方图
par(mfrow=c(2,2))
hist(mtcars$mpg)
hist(mtcars$mpg,breaks=12,col="red",xlab="Miles Per Gallon", main="Colored histogram with 12 bins")
hist(mtcars$mpg,
freq=FALSE,
breaks=12,
col="red",
xlab="Miles Per Gallon",
main="HIstogram, rug plot, density curve")
#打散数据并添加一维数据图 jitter函数使得每个数随机增减一个值
rug(jitter(mtcars$mpg))
lines(density(mtcars$mpg), col="blue", lwd=2)
x<-mtcars$mpg
h<-hist(x,breaks=12,col="red",xlab="Miles Per Gallon", main="Histogram with normal curve and box")
#叠加正太曲线
xfit<-seq(min(x),max(x),length=40)
yfit<-dnorm(xfit, mean=mean(x), sd=sd(x))
#此处对于y的处理参考一个建议公式,使得形态较好
yfit<-yfit*diff(h$mids[1:2])*length(x)
lines(xfit,yfit,col="blue", lwd=2)
box()

4、核密度图

估计随机变量的概率密度函数。

1
2
3
4
5
6
7
8
9
10
11
#核密度图
par(mfrow=c(2,1))
d<-density(mtcars$mpg)
plot(d)
d<-density(mtcars$mpg)
plot(d,main="Kernel Density of Miles Per Gallon")
polygon(d, col="red", border = "blue")
rug(mtcars$mpg, col="brown")

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#用于对比多个组间差异的核密度图 使用sm包
par(lwd=2)
library(sm)
attach(mtcars)
cyl.f <- factor(cyl, levels= c(4,6,8),
labels = c("4 cylinder", "6 cylinder",
"8 cylinder"))
#绘制对比类型的核密度图需要因子变量
sm.density.compare(mpg, cyl, xlab="Miles Per Gallon")
title(main="MPG Distribution by Car Cylinders")
#颜色用于填充图例
colfill<-c(2:(1+length(levels(cyl.f))))
#第一个参数表示用交互的方式放置图例
legend(locator(1), levels(cyl.f), fill=colfill)
detach(mtcars)

5、箱线图

箱线图(又称盒须图)通过绘制连续型变量的五数总括,即最小值、下四分位数(第25百分位数) 、中位数(第50百分位数)、上四分位数(第75百分位数)以及最大值,描述了连续型变量的分布。formula 参数例如:y ~ A*B则将为类别型变量A和B所有水平的两两组合生成数值型变量y的箱线图。

boxplot(formula, data=dataframe)

1
2
#箱线图
boxplot(mtcars$mpg, main="Box plot", ylab="Miles per Gallon")

(1)并列箱线图跨组比较

1
2
#对比箱线图
boxplot(mpg ~ cyl, data=mtcars, main="Car Mileage Data", xlab="Number of Cylinders", ylab="Miles Per Gallon",varwidth=TRUE)

1
2
3
4
5
6
7
8
9
#凹槽箱线图notch=TRUE,研究表明若两个箱的凹槽互不重叠,则表明它们的中位数有显著差异
boxplot(notch=TRUE,
mpg ~ cyl,
data=mtcars,
col="red",
main="Car Mileage Data",
xlab="Number of Cylinders",
ylab="Miles Per Gallon",
varwidth=TRUE)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#多交叉因子箱线图
mtcars$cyl.f<- factor(mtcars$cyl,levels = c(4,6,8),
labels = c("4","6","8"))
mtcars$am.f<- factor(mtcars$am,levels = c(0,1),
labels = c("auto","standard"))
boxplot(mpg~am.f*cyl.f,
data=mtcars,
varwidth=TRUE,
col=c("gold","darkgreen"),
main="MPG Distribution by Auto Type",
xlab="Auto Type")

(2)小提琴图

Vioplot(x1,x2,…,names=,col=)

1
2
3
4
5
6
7
library(vioplot)
x1<-mtcars$mpg[mtcars$cyl==4]
x2<-mtcars$mpg[mtcars$cyl==6]
x3<-mtcars$mpg[mtcars$cyl==8]
vioplot(x1,x2,x3,names=c("4 cyl","6 cyl","8 cyl"),
col="gold")
title("公里数与油耗的小提琴图")

  • 在图中,白点是中位数,黑色盒型的范围是下四分位点到上四分位点,细黑线表示须。外部形状即为核密度估计。

6、点图

dotchart(x,labels=)

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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,
pch=19,
main="每种车型的加仑公里数,通过气缸分组",
xlab="每加仑的公里数"
)

文章目录
  1. 基本图形
    1. 1、条形图
      1. (1)简单的条形图
      2. (2)堆砌条形图和分组条形图
      3. (3)均值条形图
      4. (4)微调柱状图
      5. (5)棘状图
    2. 2、饼图
      1. (1)饼图(表达信息能力弱,不推荐)
      2. (2)折叠扇图
    3. 3、直方图
    4. 4、核密度图
    5. 5、箱线图
      1. (1)并列箱线图跨组比较
      2. (2)小提琴图
    6. 6、点图