首页 > 解决方案 > 使用 ggplot 连接分组点图中的所有点

问题描述

我有这样的数据框

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。我可以创建分组点图

在此处输入图像描述

标签: rggplot2

解决方案


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

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")) 

在此处输入图像描述

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

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)}

在此处输入图像描述

{}必须对管道中断和标签值进行幻想。


推荐阅读