R ggplot2 двухуровневая фасетка - PullRequest
0 голосов
/ 05 октября 2018

Я бы хотел отредактировать метки фасетов графики ggplot с помощью facet_wrap следующим образом:

  1. Я хотел бы написать метки ALPHA и BETA только в верхнем ряду.

  2. Я хотел бы написать ПЕРВЫЙ, ВТОРОЙ и ТРЕТИЙ только на левой стороне и только один раз в строке.

Возможно ли такое?

В качестве альтернативы я пытался работать с сеткой, но «чистый» график ggplot выглядит лучше, а код легче манипулировать (меньше копий и вставок для каждой строки).Также я столкнулся с проблемами с высотой строки при помощи grid_arrange (некоторые сюжеты отключены).

Пример:

Anames <- list(
  '1'="FIRST",
  '2'="SECOND",
  '3'="THIRD")

Bnames <- list(
  'A'="ALPHA",
  'B'="BETA")

plot_labeller <- function(variable,value){

# http://www.sthda.com/english/wiki/print.php?id=175

  if (variable=='variable') {
    return(Anames[value])
  } else {
    return(Bnames[value])
  }
}

tdat <- data.frame("variable" = c(rep(seq(1,3),10)), # Group Factor 1 
                   "B" = c(rep(seq(1,2),15)), # Group Factor 2
                   "time" = c(1:30),
                   "value" = sample(1:100,30))
tdat$B <- ifelse(tdat$B==1,"A","B")

library(ggplot2)
ggplot(data=tdat, aes(x=time,y=value)) +
  geom_bar(stat="identity")+
  facet_wrap(~variable+B,
             labeller=plot_labeller,
             ncol=2,scales="free_y")

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Для сравнения двух типов переменных часто проще использовать facet_grid:

ggplot(data=tdat, aes(x=time,y=value)) +
    geom_bar(stat="identity")+
    facet_grid(rows = vars(variable), cols = vars(B), 
               labeller = plot_labeller, scales="free_y", switch = 'y')

enter image description here

0 голосов
/ 05 октября 2018

Вы можете использовать facet_grid для этого.switch установлен на «y» для нанесения меток на левой стороне.

ggplot(data=tdat, aes(x=time,y=value)) +
    geom_bar(stat="identity")+
    facet_grid(variable ~ B,
               labeller=plot_labeller,
               scales="free_y",
               switch = "y")
...