ggplot2:分类 x 的不同间距

Fél*_*neo 1 r ggplot2

对于粗化图,我比较了几个重叠组的不同比例(愚蠢的例子:男人和女人和小/高)。

默认情况下,很明显,所有 x 刻度都是均匀间隔的。

为了更清晰的可视化,男人和女人应该靠近,而远离小和高(也应该靠近)。

dat <- data.frame(value=runif(6)*10,
                  lab=c('1man','2woman','3small','4tall','5sick','6healthy'))

ggplot(dat, aes(x=lab, y=value)) + 
  geom_point(position=position_dodge(0.5),size=4) +
  theme(plot.title = element_text(hjust = 0.5,size=14,face="bold"))+
  theme_classic()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我知道在 facet_wrap 和 facet_grid 周围有一些事情要做,但它会产生其他问题(例如,分组都具有相同的宽度而具有不同数量的类别。

有什么想法可以直接在图中设置分类 X 的空间吗?

cam*_*lle 6

我觉得应该已经有一个很好的 SO 帖子了,但找不到,所以我会抛出一个facet_grid解决方案。如果您设置scales = "free_x",则分面面板将设置彼此独立的限制,并添加space = "free_x"让这些面板根据其值占用的空间量设置其大小。为了说明,我添加了一个额外的组。

将组折叠成用于分面的类别变量(我喜欢forcats::fct_collapse)。假设您实际上不想要类别标签,我放弃了条状标签;您也可以调整面板间距。除此之外,我正在删除与特定问题无关的 ggplot 细节。

library(ggplot2)
library(dplyr)
set.seed(123)
dat <- data.frame(value=runif(7)*10,
                  lab=c('1man','2woman','3small','4tall','5sick','6healthy', "7chronic"))

dat2 <- dat %>%
  mutate(category = forcats::fct_collapse(lab, 
                                          sex = c("1man", "2woman"),
                                          size = c("3small", "4tall"),
                                          health = c("5sick", "6healthy", "7chronic")))

ggplot(dat2, aes(x = lab, y = value)) +
  geom_point(size = 4) +
  facet_grid(cols = vars(category), scales = "free_x", space = "free_x") +
  theme(panel.spacing.x = unit(1, "cm"),
        strip.text.x = element_blank())
Run Code Online (Sandbox Code Playgroud)