Я не уверен, почему вы хотите расположить категориальную переменную на вашем графике так, как вы это делаете, кроме эстетики (кажется, она выглядит лучше). В любом случае, простой обходной путь, который, кажется, обрабатывает общие случаи, состоит в том, чтобы отметить, что ggplot
использует числовую шкалу для построения категориальных переменных. Обходной путь для вашей диаграммы - для каждого значения x построить прозрачную точку со значением y, равным количеству категориальных переменных. Точки построены для всех значений x как простое решение для случая неперекрывающихся диапазонов значений x для каждой группы. Я добавил еще одну группу в ваш фрейм данных, чтобы сделать пример более общим.
library(ggplot2)
set.seed(123)
df <- data.frame(let = LETTERS[1:19], value = c(sample(13),20+sample(6)),
group = rep(c("foo", "bar", "bar2"), times = c(5,8,6)))
num_rows <- xtabs(~ group, df)
max_rows <- max(num_rows)
sp <- ggplot(df, aes(y= let, x = value)) +
geom_point() +
geom_point(aes(y = max_rows +.5), alpha=0 ) +
facet_wrap(~group, scales = "free", nrow=1 )
plot(sp)
Это дает следующий график: