2014-08-01 1 views
9

Я создаю boxplot, используя ggplot2. Я могу создать boxplot успешно, но у меня возникли проблемы при объединении двух функций с огранкой в ​​ggplot2:ggplot2: Как получить функциональные возможности слияния факельных_секунд() labeller = label_both и facet_wrap() ncol options?

1. When faceting, strip text should contain column name & column value (as given by labeller=label_both argument in facet_grid()) 
2. The facets should be split into as many rows & columns as I want (as given by nrow and ncol argument in facet_wrap()) 

Вот подмножество моей dataframe (Действительное dataframe довольно велико):

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

enter image description here

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

enter image description here

Как я могу разделить свой участок на несколько столбцов/строк, а также имеют описательный текст полосу, содержащую столбец значение имени & в гранях?

+0

[Ответ] (http://stackoverflow.com/questions/11979017/changing-facet-label-to-math-formula-in-ggplot2) говорит об изменении 'facet_wrap' использовать математические выражения, но та же идея может быть использована для полного изменения текста. – MrFlick

+0

Выглядит очень сложно, но спасибо, я постараюсь его реализовать. –

+0

Может быть, у кого-то будет лучшее предложение, но странно, что 'facet_wrap' не имеет метки, такой как' facet_grid'. – MrFlick

ответ

3

Это немного взломанный, но, похоже, он обеспечивает то, о чем вы просите.

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")) 

+0

Простой, но умный, определенно путь! Большое спасибо! –

Смежные вопросы