ggplot2:如何获得facet_grid()的labeller = label_both和facet_wrap()的ncol选项的合并功能?

Kom*_*thi 9 r facet ggplot2 r-grid

我正在使用ggplot2创建一个boxplot.我能够成功创建boxplot但是在ggplot2中将两个要素与facet合并时遇到问题:

>tmpdf

    value  treat FoldChange Gene Pvalue.Adj
 523.8589 Normal     -1.899    A    0.02828
 489.7638 Normal     -1.899    A    0.02828
 642.0126 Cancer     -1.899    A    0.02828
 928.8136 Cancer     -1.899    A    0.02828
 624.7892 Normal     -1.899    A    0.02828
  53.8685 Normal     -7.135    B    0.00012
 184.6473 Normal     -7.135    B    0.00012
  76.2712 Cancer     -7.135    B    0.00012
  48.0607 Cancer     -7.135    B    0.00012
 177.9528 Normal     -7.135    B    0.00012
4581.2847 Normal     -1.886    C    0.04924
7711.3411 Normal     -1.886    C    0.04924
6007.9852 Cancer     -1.886    C    0.04924
5940.9232 Cancer     -1.886    C    0.04924
4433.0949 Normal     -1.886    C    0.04924
 171.9172 Normal     -4.594    D    0.00093
 316.3900 Cancer     -4.594    D    0.00093
 231.3177 Cancer     -4.594    D    0.00093
 295.1096 Normal     -4.594    D    0.00093
 322.8346 Normal     -4.594    D    0.00093
Run Code Online (Sandbox Code Playgroud)

这是我的数据帧的一个子集(实际的数据帧非常大):

#Here I am using facet_grid and labeller=label_both, this gives me column names & column values in the facet strip text but I am unable to divide the plot into columns & rows.

ggplot(tmpdf,aes(x=treat,y=log(value+1),fill=treat)) + geom_boxplot(show_guide=F) + 
facet_grid(~Gene+FoldChange+Pvalue.Adj,labeller=label_both) + ylab("log2(Expression)\n") + 
ggtitle("Boxplot with facet_grid & labeller\n\nlabeller=label_both shows column names with column values\n") +
theme(axis.text.x=element_text(size=14,color="black"),
    axis.text.y=element_text(size=14,color="black"),
    strip.text=element_text(size=14,color="black"),
    axis.title.x=element_blank(),
    axis.title.y=element_text(size=14,color="black"),
    plot.title=element_text(size=16,color="black"))

#This creates the following plot:
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

#And here is the second code:
#This divides the plot into as many columns as I want but doesn't show the column name in the facet strip text. 
#Strip text contains comma-separated values that are less informative.

ggplot(tmpdf,aes(x=treat,y=log(value+1),fill=treat)) + geom_boxplot(show_guide=F) + 
facet_wrap(~Gene+FoldChange+Pvalue.Adj,ncol=2) + ylab("log2(Expression)\n") + 
ggtitle("Boxplot with facet_wrap & ncol\n\nDoesn't show column name\n") +
theme(axis.text.x=element_text(size=14,color="black"),
    axis.text.y=element_text(size=14,color="black"),
    strip.text=element_text(size=14,color="black"),
    axis.title.x=element_blank(),
    axis.title.y=element_text(size=14,color="black"),
    plot.title=element_text(size=16,color="black"))

#This creates the following plot:
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

>tmpdf

    value  treat FoldChange Gene Pvalue.Adj
 523.8589 Normal     -1.899    A    0.02828
 489.7638 Normal     -1.899    A    0.02828
 642.0126 Cancer     -1.899    A    0.02828
 928.8136 Cancer     -1.899    A    0.02828
 624.7892 Normal     -1.899    A    0.02828
  53.8685 Normal     -7.135    B    0.00012
 184.6473 Normal     -7.135    B    0.00012
  76.2712 Cancer     -7.135    B    0.00012
  48.0607 Cancer     -7.135    B    0.00012
 177.9528 Normal     -7.135    B    0.00012
4581.2847 Normal     -1.886    C    0.04924
7711.3411 Normal     -1.886    C    0.04924
6007.9852 Cancer     -1.886    C    0.04924
5940.9232 Cancer     -1.886    C    0.04924
4433.0949 Normal     -1.886    C    0.04924
 171.9172 Normal     -4.594    D    0.00093
 316.3900 Cancer     -4.594    D    0.00093
 231.3177 Cancer     -4.594    D    0.00093
 295.1096 Normal     -4.594    D    0.00093
 322.8346 Normal     -4.594    D    0.00093
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如何将我的绘图拆分为多个列/行,以及在刻面中包含列名称和值的描述性条带文本?

jlh*_*ard 4

这有点黑客,但它似乎确实提供了您所要求的内容。

tmpdf$label <- with(tmpdf,paste("Gene:",Gene,"\n","FoldChange:",FoldChange,"\n","Pvalue.Adj:",Pvalue.Adj))

ggplot(tmpdf,aes(x=treat,y=log(value+1),fill=treat)) + geom_boxplot(show_guide=F) + 
  facet_wrap(~label,ncol=2) + ylab("log2(Expression)\n") + 
  ggtitle("Boxplot with facet_wrap & ncol") +
  theme(axis.text.x=element_text(size=14,color="black"),
        axis.text.y=element_text(size=14,color="black"),
        strip.text=element_text(size=14,color="black"),
        axis.title.x=element_blank(),
        axis.title.y=element_text(size=14,color="black"),
        plot.title=element_text(size=16,color="black"))
Run Code Online (Sandbox Code Playgroud)