首页 > 解决方案 > 带有 ggplot2 和 geom_dumbbell 的多行嵌套

问题描述

我正在尝试将这两个图表合二为一。理想情况下,我会将每个区域分为两个子类别,并让每个区域的男性和女性哑铃彼此重叠。

理想情况下,我还想消除女性和男性 y 轴标题,只用颜色定义每个变量。

图片有两个相邻的哑铃图,x轴不同,y轴相同

图片有两个相邻的哑铃图,x轴不同,y轴相同

这是我目前拥有的代码:

lung<- ggplot(lungz, aes(y=world_region, x=lower_95, xend=upper_95, colour=sex))+geom_dumbbell(size=1,
            size_x = 1,
            size_xend = 1)+
geom_point(lungz, mapping=aes(y=world_region, x=pir, colour=sex), size=3)+
  scale_fill_manual(values = c("#339ff2", "#f23333"))+
  facet_wrap(vars(sex), strip.position = "left", scales = "free_x")+mdh_style()+labs(title="Lung and Bronchus Cancer PIR",
   subtitle = "Stratified by Sex and World Region",
   x="Age-Adjusted Proportional Incidence Ratio")

lung<- lung + geom_vline(xintercept = 1, linetype="dotted", size=1, colour="#53565a")+geom_vline(xintercept = 0, size=0.75, colour="#000000")+theme(panel.grid.major.x = element_line(color="#cbcbcb"),
         panel.grid.major.y = element_blank())

标签: rggplot2

解决方案


如果没有可重复的数据集示例进行尝试,很难确定问题的解决方案。

据我了解,您希望将 y 轴上的每个区域细分为男性和女性。一种可能的解决方案是反转用于构面和 y 轴world_region的变量,并将其作为参数facet_gridsex作为y轴的参数。然后,通过对构面标签位置和间距的一些操作,您可以模仿您所期望的图形。

由于您没有提供可重复的示例,因此我制作了一个可能无法完全模仿您的数据的示例。因此,您必须调整提供的代码以使其适用于您的数据。另外,我不知道mdh_style,您也没有为此函数引用任何库,所以我使用ggplot2. 希望它与您的主题兼容。

library(ggalt)
library(ggplot2)

df <- data.frame(world = rep(c("West Africa", "Southeast Asia", "Europe"),2),
                 sex = rep(c("M","F"), each = 3),
                 mean = c(1,3,4,5,2,3),
                 low = c(0,0.1,0.2,0.23,0.3,0),
                 end = c(4,5,7,6,8,6))

ggplot(df, aes(x = low, y = sex, xend = end, color = sex))+
  geom_dumbbell()+
  facet_grid(world~., switch = "y", scales = "free_y")+
  theme_bw()+
  theme(strip.text.y = element_text(angle = 180),
        strip.placement = "outside",
        panel.grid.major.x = element_line(color="#cbcbcb"),
        panel.grid.major.y = element_blank(),
        legend.position = "top",
        panel.spacing = unit(0, "lines"),
        axis.text.y = element_blank())+
  labs(title="Lung and Bronchus Cancer PIR", y = "",
       subtitle = "Stratified by Sex and World Region",
       x="Age-Adjusted Proportional Incidence Ratio")

在此处输入图像描述

如果这不起作用,请提供您的数据集的可重现示例(如何制作出色的 R 可重现示例)。


推荐阅读