Попробуй это.Сначала создайте новую переменную, которая является копией вашего "variable"
, просто используйте paste0
, чтобы добавить число, чтобы избежать путаницы, я назвал его "variable2"
.
Напечатайте новый df
, чтобы увидеть разницу.Этот новый variable2
будет использоваться как aes()
для geom_beeswarm()
, затем просто используйте scale_x_discrete
и поиграйтесь с theme()
, чтобы центрировать текст на x-axis
.
Снова Iпредлагаем напечатать график до вызова scale_x_discrete()
ecc .. чтобы понять, что я имею в виду.
df$variable2 <- paste0(df$variable, "2") # create a second almost identical variable
ggplot(df,aes(variable, value)) +
geom_beeswarm(aes(variable2),priority='random',cex=2.5) + # use variable2 as custom aes() for the bees
geom_boxplot() +
# play with this to customize labels, we just want to hide "control2" and "treatment2"
scale_x_discrete(breaks = c("control", "treatment")) +
# with this we center the text and remove the tick marks to improve the plot
theme(axis.text.x = element_text(hjust=-1),
axis.ticks.x = element_blank(),
panel.grid.major.x = element_blank()) # removes vertical grid white lines
Пример данных:
library(ggbeeswarm)
df <- data.frame('variable'=rep(c('control','treatment'),each=20),
'value'=c(runif(20, min=0, max=3), rnorm(60)))
Обновление для ответа на запрос OP с большим интервалом.
Я не смог найти лучший способ добавить интервал между geoms
.Я использовал хитрость создания двух фиктивных новых переменных, которые будут использоваться для построения третьей geom
прямо рядом с beeswarm
.
Это заставит ggplot
сделать некоторый интервал, и новый geom
будет скрыт путем установки того же color
, что и bg
panel
.
Я использовал geom_boxplot()
.
Новый пример данных:
df <- data.frame('variable'=rep(letters[1:7],each=20),
'value'=c(runif(40, min=0, max=3), rnorm(100)))
df$variable2 <- paste0(df$variable, "2") # create a second almost identical variable
Создайте две новые переменные, которые мы можем использовать для построения третьего объекта, который будет маскироваться с использованием того же color
, что и bg
.
df$variable3 <- paste0(df$variable, "3")
df$value3 <- c(runif(40, min=0, max=3), rnorm(100))
Наконец:
ggplot(df,aes(variable, value)) +
geom_beeswarm(aes(variable2),priority='random',cex=2.5) +
geom_boxplot() +
geom_boxplot(aes(variable3, value3), color="white") + # this is the boxplot that we will hide (notice the color choice)
scale_x_discrete(breaks = c(letters[1:7])) +
theme(axis.text.x = element_text(hjust=-6), # adjust to center the x-labels
axis.ticks.x = element_blank(),
panel.background = element_rect(color="white", fill="white"),
panel.grid.major.x = element_blank(),
panel.grid.major = element_blank(), # to remove grid lines
panel.grid.minor = element_blank(),
axis.line = element_line(size = 0.5, linetype = "solid",
colour = "black"))
Опять же, это можно настроить еще больше.