首页 > 解决方案 > 在ggplot2中的两个指定框之间添加空格和一条线

问题描述

我有一个使用箱线图的项目,但其中一个箱线图与其他箱线图略有不同。所以我想在这个盒子和其他所有盒子之间增加一些空间,但与此同时,其他盒子之间的间距保持不变。我还想在这个框和所有其他框之间添加一条虚线。

这是一个可重现的示例:

library(ggplot2)
ggplot(data = mtcars, aes(x = factor(gear), y = mpg)) + 
  geom_boxplot(width = 0.5) + 
  geom_vline(xintercept = 4.5) + 
  theme_classic()

在此处输入图像描述

我想要的是在factor(gear)4 和 5 之间添加一些额外的空间,同时保持 3 和 4 之间的空间相同。此外,在 4 和 5 之间添加一条虚线。

我试图用谷歌搜索,但没有找到好的答案。任何建议将不胜感激。

标签: rggplot2

解决方案


为了使事情更现实,让我们从gear一个因素开始,而不是在 ggplot 中转换它:

mtcars2 <- within(mtcars, gear <- factor(gear))

诀窍是使离散轴成为带有自定义标签的连续轴。因此,我们需要将因子转换为数值,并在最右边的值上加一点:

xvals <- as.numeric(mtcars2$gear)
xvals[xvals == max(xvals)] <- xvals[xvals == max(xvals)] + 1
mtcars2$xvals <- xvals

xvals现在我们在 x 轴上绘制 using ,但使用因子水平gear来标记中断。请注意,我们可以使用单词而不是字符“3”、“4”和“5”,即使这是一个数字轴。

ggplot(data = mtcars2, aes(x = xvals, y = mpg, group = gear)) + 
  geom_boxplot(width = 0.5) + 
  geom_vline(xintercept = max(xvals) - 1, linetype = 2) + 
  scale_x_continuous(breaks = sort(unique(xvals)), labels = levels(mtcars2$gear)) +
  labs(x = "gear") +
  theme_classic()

在此处输入图像描述


推荐阅读