R 分裂蜂群图

R 分裂蜂群图,r,ggplot2,R,Ggplot2,如何按组分割蜂群图,类似于以下内容: 但是我想得到点,而不是密度图 @axeman在相关问题中提出的“计算密度方法”显然不起作用,因为蜂群不使用密度 #Desired output: require(ggplot2) require(ggbeeswarm) my_dat <- data.frame(x = 'x', m = rep(c('a','b'),100), y = rnorm(200)) ggplot(my_dat, aes(x,y))+ geom_quasirandom(meth

如何按组分割蜂群图,类似于以下内容:

但是我想得到点,而不是密度图

@axeman在相关问题中提出的“计算密度方法”显然不起作用,因为蜂群不使用密度

#Desired output:
require(ggplot2)
require(ggbeeswarm)
my_dat <- data.frame(x = 'x', m = rep(c('a','b'),100), y = rnorm(200))
ggplot(my_dat, aes(x,y))+ geom_quasirandom(method = 'smiley')
#所需输出:
需要(ggplot2)
需要(GGBeeSarm)

my_dat您可以尝试以下硬编码解决方案

library(tidyverse)
# the plot
p <- ggplot(my_dat, aes(x,y,color=m))+ 
  geom_quasirandom(method = 'smiley')
# get the layer_data(p, i = 1L)
p <- ggplot_build(p)
# update the layer data
p$data[[1]] <-   p$data[[1]] %>%
  mutate(x=case_when(
    colour=="#00BFC4" ~ PANEL + abs(PANEL - x),
    TRUE ~ PANEL - abs(PANEL - x))
  )
# plot the update
plot(ggplot_gtable(p))

不幸的是,它似乎还没有完全结束。。。保存分离的蜂群地块似乎有问题。使用ggsave再次混合这些点,通过
pdf()
打开设备不会绘制任何内容。你有什么解释吗?(我想这一定与函数的使用有关,但我在这里有些不知所措)。如果您认为值得,我很高兴将此作为一个单独的问题提问。@Tjebo在这里使用
ggsave(foo(p),filename=“test.pdf”)
没有问题。信息
ggplot2\u 2.2.1
R版本3.4.1
再次感谢对
ggplot\u构建的这一伟大提示。我对您的函数进行了一些调整,以便将其推广到多个绘图中-使用
for(I in 1:length(p$data)){p$data[[I]]%等。
。如果其他人应该阅读此注释,在多个绘图的情况下,您需要在
aes
中使用
group
参数指定每个绘图中的组
foo <- function(plot){
 p <- ggplot_build(plot)
 p$data[[1]] <-   p$data[[1]] %>%
   mutate(diff = abs(x-round(x)),  # calculating the difference to the x axis position
          # update the new position depending if group is even (+diff) or odd (-diff)
          x = case_when(group %% 2 == 0 ~ round(x) + diff,
                        TRUE ~ round(x) - diff)) %>%
   select(-diff)
 plot(ggplot_gtable(p))
}
set.seed(121)
p <- diamonds %>% 
  mutate(col=gl(2,n()/2)) %>% 
  sample_n(1000) %>% 
  ggplot(aes(cut,y,color= factor(col)))+ 
  geom_beeswarm()
p
foo(p)