Иерархическая огранка ggplot

У меня есть экспериментальные данные, которые я хочу построить, используя ggplot facet_grid.

В эксперименте были собраны измерения двух видов, трех условий, в 6 партиях:

species <- c("spcies1","species2")
conditions <- c("cond1","cond2","cond3")
batches <- 1:6

df <- expand.grid(species=species,condition=conditions,batch=batches)

измерения представляют собой дроби от 0 до 1:

set.seed(1)
df$y <- runif(nrow(df),0,1)

В этом случае у меня есть только одна реплика для каждого вида, состояния и партии:

df$replicate <- 1

Но это гибко.

Я хочу раскрасить каждое измерение его видом, состоянием и партией (в этом конкретном примере, поскольку есть одна реплика, каждое наблюдение имеет свой уникальный цвет):

df$col.fill <- paste(df$species,df$condition,df$batch,sep=".")

Факторизация переменных:

df$col.fill <- factor(df$col.fill,levels=unique(df$col.fill))
df$species <- factor(df$species,levels=species)
df$condition <- factor(df$condition,levels=conditions)

Я хочу отобразить данные таким образом, чтобы они были разделены по видам, условиям и партиям, а грани были помечены соответствующим образом.

Вот что я пытаюсь: библиотека (ggplot2)

integerBreaks <- function(n = 5, ...)
{
  library(scales)
  breaker <- pretty_breaks(n, ...)
  function(x){
    breaks <- breaker(x)
    breaks[breaks == floor(breaks)]
  }
}


ggplot(df,aes(x=replicate,y=y,color=col.fill))+
geom_point(size=3)+facet_grid(~species+condition+batch,scales="free_x")+
scale_x_continuous(breaks=integerBreaks())+
theme_minimal()+theme(legend.position="none",axis.title=element_text(size=8))

что дает мне: введите здесь описание изображения

Это повторяет виды и условия для каждой партии, поэтому этикетки становятся слишком тесными и сокращаются. Есть ли способ, чтобы метки аспектов видов появлялись только один раз для каждого вида, а метки аспектов условий появлялись только один раз для каждого состояния (т. е. следовали их иерархии)?

Это будет означать, что у меня будет только две метки фасетов видов и шесть меток фасетов условий (повторяющихся для каждого вида).


person dan    schedule 29.09.2017    source источник
comment
Если я правильно понимаю ваш вопрос, это близкий родственник этот вопрос и этот вопрос , хотя эти вопросы включают только добавление одной общей метки на полосы (т. е. две фасетные переменные вместо трех, как в вашем случае).   -  person aosmith    schedule 29.09.2017
comment
См. решение, размещенное здесь, с использованием grid и gtable, чтобы разрешить вложенные аспекты stackoverflow.com/questions/40316169/   -  person Djork    schedule 29.09.2017
comment
Спасибо. Есть ли способ перемаркировать метки граней после создания графика?   -  person dan    schedule 30.09.2017