将箱线图数据分组,同时将其各自的 X 轴标签保留在 R 中的 ggplot2 中
Group boxplot data while keeping their individual X axis labels in ggplot2 in R
我正在根据样本类型(x 轴)绘制 Gene1 计数的等级(y 轴)。我希望根据样本的来源组织(乳腺、结肠直肠、肺)对样本类型进行分组,并用颜色编码分别表示它们来自癌症还是正常组织,分别为红色和绿色。
我制作了图表 1) 带分面的箱线图(请参见下文),它接近我的设想,但显示了一些主要问题。我有几个问题需要改进图表:
[IMG]http://i57.tinypic.com/10yfmmw.png[/IMG]
1) 每个面最终都有 9 个通道(列),其中许多通道(列)没有被盒子占据。如何删除每个面中未被框占用的通道(列)?
2) 我可以在不使用分面的情况下绘制此图,同时仍保留如图所示的分组吗?
3) 是否可以创建两层刻面标签? IE。我想将标签 "Gene1" 放置在现有构面标签的上方和横跨。这将使我能够为 Gene2 生成如下所示的相同图形,因此我可以将两个图形彼此相邻地刻面化,并在每个图形的顶部使用 "master" 刻面标签。
我希望这是有道理的。谢谢大家的建议和想法。
请查看以下代码,您可以下载我的数据并重现图表:
测试文件导入
fileURL <- "https://dl.dropboxusercontent.com/u/4098921/testfile.csv"
test <- read.csv(fileURL,header=T)
head(test)
> head(test)
Subset Tissue Type id Gene1 Gene2
1 Normal Breast GTEx_Breast 1 5027 12597
2 Normal Breast GTEx_Breast 2 5287 12338
3 Normal Breast GTEx_Breast 3 2385 12543
4 Normal Breast GTEx_Breast 4 3174 12266
5 Normal Breast GTEx_Breast 5 6593 11350
6 Normal Breast GTEx_Breast 6 4648 10932
1) 带分面的箱线图
library(ggplot2)
ggplot(test,aes(x=Type, y=Gene1, fill=Subset))+
geom_boxplot(notch=T, notchwidth=0.5,outlier.shape=1,outlier.size=2, coef=1.5)+
theme(axis.text=element_text(color="black"))+
theme(axis.text.x=element_text(angle=90,hjust=1,vjust=0.4))+
theme(panel.grid.minor=element_blank())+
labs(size= "Type",x = "",y = "Rank of Gene1 count", title = "1) BOXPLOT WITH FACETS")+
scale_fill_manual(values=c("red","lawngreen"),name="Subset",
labels=c("Cancer (TCGA)", "Normal (GTEx)"))+
facet_grid(~Tissue)
您可以通过将 scales = "free_x"
添加到 facet_grid
来删除 x 轴上未使用的标签。如果您还添加 space = "free"
,您将获得相同大小的箱线图。有:
ggplot(test,aes(x=Type, y=Gene1, fill=Subset))+
geom_boxplot(notch=T, notchwidth=0.5,outlier.shape=1,outlier.size=2, coef=1.5)+
theme(axis.text=element_text(color="black"))+
theme(axis.text.x=element_text(angle=90,hjust=1,vjust=0.4))+
theme(panel.grid.minor=element_blank())+
labs(size= "Type",x = "",y = "Rank of Gene1 count", title = "1) BOXPLOT WITH FACETS")+
scale_fill_manual(values=c("red","lawngreen"),name="Subset",
labels=c("Cancer (TCGA)", "Normal (GTEx)"))+
facet_grid(~Tissue, scales = "free_x", space = "free")
你会得到如下剧情:
当您不想使用分面但保留分组时,您可能想要创建一个将分组考虑在内的新变量。你可以用 interaction
:
# create the new variable
test$newType <- factor(interaction(test$Tissue,test$Type))
# set the correct order of the new variable
test$newType <- factor(test$newType,
levels=levels(test$newType)[order(levels(test$newType))],
labels=levels(test$Type)[order(levels(test$newType))])
然后你可以制作一个新的情节:
ggplot(test,aes(x=newType, y=Gene1, fill=Subset))+
geom_boxplot(notch=T, notchwidth=0.5,outlier.shape=1,outlier.size=2, coef=1.5)+
theme(axis.text=element_text(color="black"))+
theme(axis.text.x=element_text(angle=90,hjust=1,vjust=0.4))+
theme(panel.grid.minor=element_blank())+
labs(size= "Type",x = "",y = "Rank of Gene1 count", title = "1) BOXPLOT WITH FACETS")+
scale_fill_manual(values=c("red","lawngreen"),name="Subset",
labels=c("Cancer (TCGA)", "Normal (GTEx)"))
生成以下图:
如果你想在你的图中同时包含 Gene1
和 Gene2
,最好的办法是先将你的数据重塑为长格式:
library(tidyr)
test2 <- test %>% gather(gene,value,5:6)
你可以用以下方式制作情节:
ggplot(test2,aes(x=Type, y=value, fill=Subset))+
geom_boxplot(notch=T, notchwidth=0.5,outlier.shape=1,outlier.size=2, coef=1.5)+
theme(axis.text=element_text(color="black"))+
theme(axis.text.x=element_text(angle=90,hjust=1,vjust=0.4))+
theme(panel.grid.minor=element_blank())+
labs(size= "Type",x = "",y = "Rank of Gene1 count", title = "1) BOXPLOT WITH FACETS")+
scale_fill_manual(values=c("red","lawngreen"),name="Subset",
labels=c("Cancer (TCGA)", "Normal (GTEx)"))+
facet_grid(gene~Tissue, scales = "free_x", space = "free")
以上代码将为您提供以下情节:
在不使用额外分面层的情况下包含不同基因的选项,您可以使用:
ggplot(test2,aes(x=Type, y=value, fill=Subset, alpha=gene))+
geom_boxplot(notch=T, notchwidth=0.5,outlier.shape=1,outlier.size=2, coef=1.5)+
theme(axis.text=element_text(color="black"))+
theme(axis.text.x=element_text(angle=90,hjust=1,vjust=0.4))+
theme(panel.grid.minor=element_blank())+
labs(size= "Type",x = "",y = "Rank of Gene count", title = "BOXPLOT WITH FACETS")+
scale_fill_manual(values=c("red","lawngreen"),name="Subset",
labels=c("Cancer (TCGA)", "Normal (GTEx)"))+
facet_grid(.~Tissue, scales = "free_x", space = "free") +
theme_bw() +
theme(axis.text.x=element_text(angle=90, vjust=0.5, hjust=1))
结果:
我正在根据样本类型(x 轴)绘制 Gene1 计数的等级(y 轴)。我希望根据样本的来源组织(乳腺、结肠直肠、肺)对样本类型进行分组,并用颜色编码分别表示它们来自癌症还是正常组织,分别为红色和绿色。
我制作了图表 1) 带分面的箱线图(请参见下文),它接近我的设想,但显示了一些主要问题。我有几个问题需要改进图表:
[IMG]http://i57.tinypic.com/10yfmmw.png[/IMG]
1) 每个面最终都有 9 个通道(列),其中许多通道(列)没有被盒子占据。如何删除每个面中未被框占用的通道(列)?
2) 我可以在不使用分面的情况下绘制此图,同时仍保留如图所示的分组吗?
3) 是否可以创建两层刻面标签? IE。我想将标签 "Gene1" 放置在现有构面标签的上方和横跨。这将使我能够为 Gene2 生成如下所示的相同图形,因此我可以将两个图形彼此相邻地刻面化,并在每个图形的顶部使用 "master" 刻面标签。
我希望这是有道理的。谢谢大家的建议和想法。
请查看以下代码,您可以下载我的数据并重现图表:
测试文件导入
fileURL <- "https://dl.dropboxusercontent.com/u/4098921/testfile.csv"
test <- read.csv(fileURL,header=T)
head(test)
> head(test)
Subset Tissue Type id Gene1 Gene2
1 Normal Breast GTEx_Breast 1 5027 12597
2 Normal Breast GTEx_Breast 2 5287 12338
3 Normal Breast GTEx_Breast 3 2385 12543
4 Normal Breast GTEx_Breast 4 3174 12266
5 Normal Breast GTEx_Breast 5 6593 11350
6 Normal Breast GTEx_Breast 6 4648 10932
1) 带分面的箱线图
library(ggplot2)
ggplot(test,aes(x=Type, y=Gene1, fill=Subset))+
geom_boxplot(notch=T, notchwidth=0.5,outlier.shape=1,outlier.size=2, coef=1.5)+
theme(axis.text=element_text(color="black"))+
theme(axis.text.x=element_text(angle=90,hjust=1,vjust=0.4))+
theme(panel.grid.minor=element_blank())+
labs(size= "Type",x = "",y = "Rank of Gene1 count", title = "1) BOXPLOT WITH FACETS")+
scale_fill_manual(values=c("red","lawngreen"),name="Subset",
labels=c("Cancer (TCGA)", "Normal (GTEx)"))+
facet_grid(~Tissue)
您可以通过将 scales = "free_x"
添加到 facet_grid
来删除 x 轴上未使用的标签。如果您还添加 space = "free"
,您将获得相同大小的箱线图。有:
ggplot(test,aes(x=Type, y=Gene1, fill=Subset))+
geom_boxplot(notch=T, notchwidth=0.5,outlier.shape=1,outlier.size=2, coef=1.5)+
theme(axis.text=element_text(color="black"))+
theme(axis.text.x=element_text(angle=90,hjust=1,vjust=0.4))+
theme(panel.grid.minor=element_blank())+
labs(size= "Type",x = "",y = "Rank of Gene1 count", title = "1) BOXPLOT WITH FACETS")+
scale_fill_manual(values=c("red","lawngreen"),name="Subset",
labels=c("Cancer (TCGA)", "Normal (GTEx)"))+
facet_grid(~Tissue, scales = "free_x", space = "free")
你会得到如下剧情:
当您不想使用分面但保留分组时,您可能想要创建一个将分组考虑在内的新变量。你可以用 interaction
:
# create the new variable
test$newType <- factor(interaction(test$Tissue,test$Type))
# set the correct order of the new variable
test$newType <- factor(test$newType,
levels=levels(test$newType)[order(levels(test$newType))],
labels=levels(test$Type)[order(levels(test$newType))])
然后你可以制作一个新的情节:
ggplot(test,aes(x=newType, y=Gene1, fill=Subset))+
geom_boxplot(notch=T, notchwidth=0.5,outlier.shape=1,outlier.size=2, coef=1.5)+
theme(axis.text=element_text(color="black"))+
theme(axis.text.x=element_text(angle=90,hjust=1,vjust=0.4))+
theme(panel.grid.minor=element_blank())+
labs(size= "Type",x = "",y = "Rank of Gene1 count", title = "1) BOXPLOT WITH FACETS")+
scale_fill_manual(values=c("red","lawngreen"),name="Subset",
labels=c("Cancer (TCGA)", "Normal (GTEx)"))
生成以下图:
如果你想在你的图中同时包含 Gene1
和 Gene2
,最好的办法是先将你的数据重塑为长格式:
library(tidyr)
test2 <- test %>% gather(gene,value,5:6)
你可以用以下方式制作情节:
ggplot(test2,aes(x=Type, y=value, fill=Subset))+
geom_boxplot(notch=T, notchwidth=0.5,outlier.shape=1,outlier.size=2, coef=1.5)+
theme(axis.text=element_text(color="black"))+
theme(axis.text.x=element_text(angle=90,hjust=1,vjust=0.4))+
theme(panel.grid.minor=element_blank())+
labs(size= "Type",x = "",y = "Rank of Gene1 count", title = "1) BOXPLOT WITH FACETS")+
scale_fill_manual(values=c("red","lawngreen"),name="Subset",
labels=c("Cancer (TCGA)", "Normal (GTEx)"))+
facet_grid(gene~Tissue, scales = "free_x", space = "free")
以上代码将为您提供以下情节:
在不使用额外分面层的情况下包含不同基因的选项,您可以使用:
ggplot(test2,aes(x=Type, y=value, fill=Subset, alpha=gene))+
geom_boxplot(notch=T, notchwidth=0.5,outlier.shape=1,outlier.size=2, coef=1.5)+
theme(axis.text=element_text(color="black"))+
theme(axis.text.x=element_text(angle=90,hjust=1,vjust=0.4))+
theme(panel.grid.minor=element_blank())+
labs(size= "Type",x = "",y = "Rank of Gene count", title = "BOXPLOT WITH FACETS")+
scale_fill_manual(values=c("red","lawngreen"),name="Subset",
labels=c("Cancer (TCGA)", "Normal (GTEx)"))+
facet_grid(.~Tissue, scales = "free_x", space = "free") +
theme_bw() +
theme(axis.text.x=element_text(angle=90, vjust=0.5, hjust=1))
结果: