Нарисуйте альтернативные прямоугольники на прямоугольниках с гранями (R, ggplot2) - PullRequest
2 голосов
/ 10 июля 2019

Я использую следующий код.

 mtcars2 <- mtcars
 library(ggplot2)
 mtcars2$carb <- as.factor(mtcars2$carb)
 mtcars2$am <- as.factor(mtcars2$am)
 sort_table <- data.frame("carb" = c(1,2,3,4,6,8), 
     "class" = c("class A", "class B", "class A", "class C", "class B", "class A"))
 odd_numbers <- seq(1,6,2)
 mtcars2 <- merge(mtcars2, sort_table, by = "carb")
 ggplot(mtcars2) + 
     geom_rect(data = mtcars2[odd_numbers, ], xmin = odd_numbers - 0.5, xmax = odd_numbers + 
     0.5, ymin = -Inf, ymax = Inf, fill = 'grey', alpha = 0.5) + 
     geom_boxplot(aes(x = carb, y = mpg, fill = am), position = position_dodge(0.9))

Это прекрасно создает этот блокпост с чередованием штриховки.enter image description here

Теперь я хотел бы добавить фасеты для каждого класса, поэтому я использую следующий код.

 ggplot(mtcars2) + 
     geom_rect(data = mtcars2[odd_numbers, ], xmin = odd_numbers - 0.5, xmax = odd_numbers + 
     0.5, ymin = -Inf, ymax = Inf, fill = 'grey', alpha = 0.5) + 
     geom_boxplot(aes(x = carb, y = mpg, fill = am), position = position_dodge(0.9)) + 
     facet_grid(cols = vars(class), scales = "free_x", switch = "x", space = "free") + 
     theme(panel.spacing.x = unit(0, "pt"), strip.background = element_rect(
         color="black", size=0.5, linetype="solid"))

Это приводит к следующему блокпосту.enter image description here

К сожалению, затенение теперь применяется только к первому фасету.Как я могу применить непрерывное затенение по всему графику, так к каждому фасету, чтобы позади carb = 6 был еще один прямоугольник?Спасибо.

1 Ответ

3 голосов
/ 10 июля 2019

Вещи отобразят соответствующий фасет, основанный на переменной фасета, которая присутствует в data.frame, который вы даете. Дайте правильный data.frame, с соответствующим отображением, например ::100100

df_tile <- data.frame(carb = c(1, 8, 6), class = c('class A', 'class A', 'class B'))

ggplot(mtcars) + 
    geom_tile(aes(x = factor(carb), y = 1, height = Inf, width = 1), data = df_tile, alpha = 0.3) + 
    geom_boxplot(aes(x = carb, y = mpg, fill = am), position = position_dodge(0.9)) + 
    facet_grid(cols = vars(class), scales = "free_x", space = "free") + 
    theme(panel.spacing.x = unit(0, "pt"), strip.background = element_rect(
        color="black", size=0.5, linetype="solid"))

enter image description here

...