参考资料:R语言实战【第2版】
条形图通过垂直的或水平的条形展示了类别型变量的分布(频数)。函数barplot()的最简单用法是:
barplot(height)
其中height是一个向量或一个矩阵。
本文中数据案例来自“vcd”包,需在第一次使用之前安装它。
1、简单条形图
若height是一个向量,则它的值就确定了各条形的高度,并将绘制一幅垂直的条形图。使用horiz=TRUE则会生成一幅水平条形图。我们也可以添加标注选项。选项main可田间一个图形标题,而xlab和ylab则会分别添加x轴和y轴标签。
library(vcd)
counts<-table(Arthritis$Improved)
counts
# 绘制简单条形图(柱形图)
barplot(counts,
main="Simple Bar Plot",
xlab="Improved",
ylab="Frequency")
# 绘制水平条形图
barplot(counts,
main="Horizontal Bar Plot",
xlab="Frequency",
ylab="Improved",
horiz=TRUE)
若要绘制的类别型变量是一个因子或有序型因子,就可以是用函数plot()快速创建一幅垂直条形图。由于Arthritis$Improve是一个因素,所以代码可以写为:
plot(Arthritis$Improved,
main="Simple Bar Plot",
xlab="Improved",
ylab="Frequency")
plot(Arthritis$Improved,
horiz=TRUE,
main="Horizontal Bar Plot",
xlab="Frequency",
ylab="Improved")
2、堆砌条形图和分组条形图
如果height是一个矩阵而不是一个向量,则绘图结果将是一幅堆砌条形图或分组条形图。若beside=FALSE(默认值),则矩阵中的每一列都将生成图中的一个条形,各列中的值将给出堆砌的“子条”的高度。若beside=TRUE,则矩阵中的每一列都表示一个分组,各列中的值将并列而不是堆砌。
# 加载vcd包
library(vcd)
counts<-table(Arthritis$Improved,
Arthritis$Treatment)
counts
# 堆砌条形图
barplot(counts,
main="Stacked Bar Plot",
xlab="Treatment",
ylab="Frequency",
col=c('red','yellow','green'),
legend=rownames(counts))
# 分组条形图
barplot(counts,
beside=TRUE,
main="Grouped Bar Plot",
xlab="Treatment",
ylab="Frequency",
col=c("red","yellow","green"),
legend=rownames(counts))
3、均值条形图
条形图不一定要基于技术数据获取频率数据。我们可以使用数据整合函数并将结果传递给barplot()函数,来创建表示均值、中位数、标准差等的条形图。
states<-data.frame(state.region,state.x77)
means<-aggregate(states$Illiteracy,
by=list(state.region),
FUN=mean)
# 展示数据
means
# 将均值从小到达排序
means<-means[order(means$x),]
means
# 创建条形图
barplot(means$x,names.arg=means$Group.1)
# 添加标题
title('Mean Illiteracy Rate')
我们还可以进一步完善这个示例:如使用gplots包中的barplot2()函数创建叠加有置信区间的均值条形图,可以通过help(barplot2)看到更多的例子。
4、条形图的微调
有若干种方式可微调条形图的外观。例如,随着条数的增多,条形的标签可能会开始重叠。我们可以使用参数cex.names来减小字号。将其指定为小于1的值可以缩小标签的大小。可选的参数names.arg允许我们指定一个字符向量作为条形的标签名。同样也可以使用图形参数辅助调整文本间隔。
# 增加y边界的大小
par(mar=c(5,8,4,2))
# 旋转条形的标签
par(las=2)
counts<-table(Arthritis$Improved)
barplot(counts,
main="Treatment Outcome",
horiz=TRUE,
cex.names=0.8,
names.arg=c('No Improvement',
'Some Improvement',
'Marked Improvement'))
par()函数能够让我们对R的默认图形做出大量修改。
R语言统计分析——图形文本、自定义坐标轴和图例_r语言全框坐标轴-CSDN博客
R语言统计分析——图形参数_r语言 "ces.axis"不是图形参数-CSDN博客
5、棘状图
棘状图(spinogram)是对堆砌条形图的重缩放,这样每个条形的高度均为1,每一段的高度即表示比例。棘状图可由vcd包中的函数spine()绘制。
# 加载vcd包
library(vcd)
attach(Arthritis)
counts<-table(Treatment,Improved)
spine(counts,main="Spinogram Example")
detach(Arthritis)