Используя scale_x_discrete(drop = FALSE), мне удается удерживать пустые группы на своем месте на оси x:

library(ggplot2)
iris_filtered <- subset(iris, Sepal.Length > 7)
ggplot(data = iris_filtered, mapping = aes(x = Species, y = Sepal.Width)) +
  geom_boxplot() +
  scale_x_discrete(drop = FALSE)

enter image description here

За исключением случаев, когда все группы пусты, я получаю:

iris_filtered <- subset(iris, Sepal.Length > 8)
ggplot(data = iris_filtered, mapping = aes(x = Species, y = Sepal.Width)) +
  geom_boxplot() +
  scale_x_discrete(drop = FALSE)

enter image description here

Мои надежды на результат:

enter image description here

2
sindri_baldur 18 Июн 2020 в 18:17

1 ответ

Лучший ответ

Вы можете просто указать пределы оси x:

iris_filtered <- subset(iris, Sepal.Length > 8)
ggplot(data = iris_filtered, mapping = aes(x = Species, y = Sepal.Width)) +
  geom_boxplot() +
  scale_x_discrete(drop = FALSE, limits = unique((iris$Species))

enter image description here

Аналогичный подход для отображения масштаба оси Y:

ggplot(data = iris_filtered, mapping = aes(x = Species, y = Sepal.Width)) +
  geom_boxplot() +
  scale_x_discrete(drop = FALSE, limits = c("a","b","c")) +
  ylim(min(iris$Sepal.Length), max(iris$Sepal.Length))

enter image description here

5
Dominik S. Meier 18 Июн 2020 в 15:26