r - 在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 之间添加一条虚线。
我试图用谷歌搜索,但没有找到好的答案。任何建议将不胜感激。
解决方案
为了使事情更现实,让我们从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()
推荐阅读
- r - 灰度折线图和一条红线
- roku - brightscript中m和m.top的区别?
- sql-server - 如何在 SSISDB 中将可执行错误作为消息公开
- jsf - 目标不可达,'movimentacao' 返回 null,但 Movimentacao 对象在 ManagedBean 中初始化
- python - 如何为电影数据库创建搜索视图,该视图可以根据标题和标题+年份查找电影
- wso2 - 如何打包 WSO2 APIM
- java - 使用 HttpClient 使用 java 客户端访问 power Bi 组
- zos - Z/os 上的所有动态库
- html - 我想在我的主页上显示即将发布的演出公告
- python - Href 在浏览器中显示不同的值,它在 selenium python 中显示`javascript:`