使用ggplot将分组点图中的所有点合并

时间:2018-08-02 07:45:18

标签: r ggplot2

我有这样的数据框

AA=
States   Clusters ncomp
HR  Cluster-1     9
HR  Cluster-2     4
HR  Cluster-3     9
WB  Cluster-1    13
WB  Cluster-2    13
WB  Cluster-3    13
WB  Cluster-4    13
TL  Cluster-1     9
TL  Cluster-2    11
TL  Cluster-3     9
TL  Cluster-4    10
TL  Cluster-5    11
TL  Cluster-6     7
OR  Cluster-1    15
OR  Cluster-2    15
OR  Cluster-3    15
OR  Cluster-4    14
OR  Cluster-5    15
OR  Cluster-6    15

需要标绘外观。我不想使用facet_wrap。 我可以创建分组点图

enter image description here

1 个答案:

答案 0 :(得分:2)

您可以尝试使用隐藏的facet_grid和一条tidyverse行来分隔Cluster列。也可以通过ave来完成

d$C2 <- ave(as.numeric(d$Clusters),  d$States, FUN = function(x) seq(1,length(x))) 

library(tidyverse)
d %>% 
  separate(Clusters, into=c("C1", "C2"), sep="-") %>% 
  ggplot(aes(as.numeric(C2), ncomp, color=States)) + 
   geom_vline(data = .  %>%   count(States) %>% 
                mutate(x=n/2+0.5),
              aes(xintercept=x),
              color="white")+
   geom_point() + 
   geom_line(aes(group=1)) + 
   facet_grid(~States, switch = "x",scales = "free_x", space = "free_x") + 
   scale_x_continuous(breaks = NULL, minor_breaks = NULL, expand = c(0.2,0.5))+
   xlab("States") + 
   theme(axis.text.x = element_blank(),
         axis.ticks = element_blank(),
         strip.background = element_blank(),
         panel.spacing.x= unit(0, "mm")) 

enter image description here

另一种方法是使用这样的交互项:

d %>% 
  # calculate a numeric interaction between clusters and States 
  mutate(x=as.numeric(interaction(Clusters,States))) %>%
   # calculate breaks 
   group_by(States) %>%
   mutate(xbreaks=mean(x)) %>% 
  {ggplot(.,aes(x, ncomp, color=States)) + 
    geom_point() +
    geom_line() +
    scale_x_continuous(breaks = unique(.$xbreaks), labels = unique(.$States),minor_breaks = NULL)}

enter image description here

必须使用{}来修饰中断和标签值。