Я хотел бы нарисовать альтернативные оттенки / прямоугольники на блокпосте, аналогично второму изображению в этом посте:
Добавление альтернативных областей затенения для категориальной переменной в гистограмме в ggplot2
Ниже приведен мой код на примере mtcars. Я преобразовал карб и цил в фактор, чтобы лучше соответствовать моим реальным данным и коду
library(ggplot2)
odd_numbers <- seq(1,33,2)
mtcars$carb <- as.factor(mtcars$carb)
mtcars$cyl <- as.factor(mtcars$cyl)
ggplot(mtcars) +
geom_boxplot(aes(x = carb, y = mpg, fill = cyl), position = position_dodge(0.9)) +
geom_rect(data = mtcars, aes(x = carb, y = mpg),
xmin= as.numeric(mtcars$carb[odd_numbers]) - 0.5,
xmax = as.numeric(mtcars$carb[odd_numbers]) + 0.5,
ymin = -Inf,
ymax = Inf, fill='grey', alpha=0.5)
Я думал, что проблема с числовой осью X была решена в коде, но есть проблема:
Предупреждение: игнорирование неизвестной эстетики: x, y
Ошибка: эстетика должна иметь длину 1 или совпадать с данными (32): xmin, xmax
Может кто-нибудь есть предложение, пожалуйста? Спасибо.
EDIT
Следуя комментариям, я отредактировал код, как показано ниже:
- удалено [odd_numbers]
- Поменялся порядок geom_boxplot
и geom_rect
Код:
library(ggplot2)
odd_numbers <- seq(1,33,2)
mtcars$carb <- as.factor(mtcars$carb)
mtcars$cyl <- as.factor(mtcars$cyl)
ggplot(mtcars) +
geom_rect(data = mtcars, aes(x = carb, y = mpg),
xmin= as.numeric(mtcars$carb) - 0.5,
xmax = as.numeric(mtcars$carb) + 0.5,
ymin = -Inf,
ymax = Inf, fill='grey', alpha=0.5) +
geom_boxplot(aes(x = carb, y = mpg, fill = cyl), position = position_dodge(0.9))
Это приводит к следующему, так что пока не совсем. Спасибо.
Желаемый результат похож на этот: