今天继续 跟着Nature Communications学画图 系列 最后一篇。学习R语言ggplot2包画箱线图。对应的是论文中的补充材料图4。
image.png
对应的 Nature Communications 的论文是 Fecal pollution can explain antibiotic resistance gene abundances in anthropogenically impacted environments
这篇论文数据分析和可视化的部分用到的数据和代码全部放到了github上 https://github.com/karkman/crassphage_project
非常好的R语言学习素材。
第一步读入数据
代码语言:javascript复制MG_RAST <- read.table("data/MG-RAST.txt")
接下来是对数据集的一些操作
- 首先是判断crAss这一列哪一个位置是空值,用到的是
is.na()
函数。然后挑选出空值所在的行的数据
MG_RAST_NocrAss <- MG_RAST[is.na(MG_RAST$crAss),]
下面这条命令稍微有点长,我们把它分开看。 首先是subset()
函数,基本用法是可以向量,矩阵,数据框数据按照一定的条件进行过滤,小例子
df<-data.frame(A=1:10,B=5:14)
subset(df,A<5)
统计MG_RAST_NocrAss数据集feature这一列各个变量出现的次数,使用table()
函数,table()
函数最基本的用法
> table(c("A","B","C","B","C","D"))
A B C D
1 2 2 1
接下来是names()
函数的用法
names(table(c("A","B","C","B","C","D")))
[1] "A" "B" "C" "D"
%in%的用法
代码语言:javascript复制> a<-c("A","B")
> b<-c("A","C","D")
> a%in%b
[1] TRUE FALSE
告诉你a中的元素是否在b中
代码语言:javascript复制所以今天的问题就来了
MG_RAST_NocrAss <- subset(MG_RAST_NocrAss, feature %in%
names(table(MG_RAST_NocrAss$feature)[table(MG_RAST_NocrAss$feature)>2]))
这行代码起到了什么作用,欢迎大家留言讨论。
数据准备好了,接下来就是作图了
最基本的箱线图
代码语言:javascript复制ggplot(MG_RAST_NocrAss, aes(x=feature, y=rel_res))
geom_boxplot()
image.png
因为x轴的坐标轴标签有重叠,现在是水平方向,将其改个方向
代码语言:javascript复制ggplot(MG_RAST_NocrAss, aes(x=feature, y=rel_res))
geom_boxplot()
theme(axis.text.x=element_text(angle=45, hjust=1, size=10))
image.png
更改一下x轴和y轴的标题
代码语言:javascript复制ggplot(MG_RAST_NocrAss, aes(x=feature, y=rel_res))
geom_boxplot()
theme(axis.text.x=element_text(angle=45, hjust=1, size=10))
labs(y = "Normalized ARG abundance", x="")
image.png
更改一下主题
代码语言:javascript复制ggplot(MG_RAST_NocrAss, aes(x=feature, y=rel_res))
geom_boxplot()
theme_minimal()
theme(axis.text.x=element_text(angle=45, hjust=1, size=10))
labs(y = "Normalized ARG abundance", x="")
image.png
对y进行log10转换,然后填充颜色
代码语言:javascript复制ggplot(MG_RAST_NocrAss, aes(x=feature, y=log10(rel_res)))
geom_boxplot(aes(fill=feature))
theme_minimal()
theme(axis.text.x=element_text(angle=45, hjust=1, size=10),
legend.position = "none")
labs(y = "Normalized ARG abundance", x="")
image.png