暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

R-条形图

生信工具人 2020-06-05
228

现在我们开始去学习关于R的画图,我们无论在何时分析数据,第一件要做的事情就是观察它。对于每个变量,哪些值是最常见的?值域是大是小?是否有不寻常的观测?R中提供了丰富的数据可视化函数。

条形图

条形图通过垂直的或水平的条形展示了类别型变量的分布(频数) 。函数barplot()的最简单用法是:barplot(height) 其中的height是一个向量或一个矩阵。 在接下来的示例中,我们将绘制一项探索类风湿性关节炎新疗法研究的结果。数据已包含在随vcd包分发的Arthritis数据框中。由于vcd包并没用包括在R的默认安装中,请确保在第一次使用之前先安装它(install. packages("vcd")) 。注意,我们并不需要使用vcd包来创建条形图。我们读入它的原因是为了使用Arthritis数据集。

简单的条形图

若height是一个向量,则它的值就确定了各条形的高度,并将绘制一幅垂直的条形图。使用选项horiz=TRUE则会生成一幅水平条形图。你也可以添加标注选项。选项main可添加一个图形标题,而选项 xlab 和 ylab 则会分别添加 x 轴和 y 轴标签。在关节炎研究中, 变量Improved记录了对每位接受了安慰剂或药物治疗的病人的治疗结果: 

library(vcd)
counts <- table(Arthritis$Improved)
counts
None Some Marked
42 14 28

这里我们看到,28位病人有了明显改善,14人有部分改善,而42人没有改善。你可以使用一幅垂直或水平的条形图来绘制变量counts。 

#纵向条形图
barplot(counts,
main="Simple Bar Plot",
xlab="Improvement", ylab="Frequency")
#横向条形图
barplot(counts,
main="Horizontal Bar Plot",
xlab="Frequency", ylab="Improvement",
horiz=TRUE)

堆砌条形图和分组条形图 

如果height是一个矩阵而不是一个向量,则绘图结果将是一幅堆砌条形图或分组条形图。若beside=FALSE(默认值) ,则矩阵中的每一列都将生成图中的一个条形,各列中的值将给出堆砌的“子条”的高度。若beside=TRUE,则矩阵中的每一列都表示一个分组,各列中的值将并列而不是堆砌。考虑治疗类型和改善情况的列联表: 

library(vcd)
counts <- table(Arthritis$Improved, Arthritis$Treatment)
counts
Treatment
Improved Placebo Treated
None 29 13
Some 7 7
Marked 7 21

你可以将此结果绘制为一幅堆砌条形图或一幅分组条形图。

#对齐条形图
barplot(counts,
main="Stacked Bar Plot",
xlab="Treatment", ylab="Frequency",
col=c("red", "yellow","green"),
legend=rownames(counts))
#分组条形图
barplot(counts,
main="Grouped Bar Plot",
xlab="Treatment", ylab="Frequency",
col=c("red", "yellow", "green"),
legend=rownames(counts), beside=TRUE)

棘状图

最后让我们再来看一种特殊的条形图,它称为棘状图(spinogram) 。棘状图对堆砌条形图进行了重缩放,这样每个条形的高度均为1,每一段的高度即表示比例。棘状图可由vcd包中的函数spine()绘制。以下代码可以生成一幅简单的棘状图: 

library(vcd)
attach(Arthritis)
counts <- table(Treatment, Improved)
spine(counts, main="Spinogram Example")
detach(Arthritis)

治疗组同安慰剂组相比,获得显著改善的患者比例明显更高

结束语

我还是那个在生信路上摸爬滚打的工具人。一起加油吧!如果需要提供帮助或者是反馈意见,可以发送邮件到 liwei12306@163.com


文章转载自生信工具人,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论