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

时间:2014-08-01 16:18:52

标签: r ggplot2 facet r-grid

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

  1. 当刻面时,条带文本应包含列名称和列表。列值(由facet_grid()中的labeller = label_both参数给出。)
  2. 小平面应分成多行和几行。我想要的列(由facet_wrap()中的nrow和ncol参数给出。)
  3. 这是我的数据框的一个子集(实际数据框非常大):

    >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
    

    这是我的代码:

    #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:
    

    #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:
    

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

1 个答案:

答案 0 :(得分: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"))