r - 在ggplot2中添加新geom作为新行,防止绘图分层
问题描述
我很确定这很容易做到,但我似乎找不到将这个问题查询到谷歌或堆栈的正确方法,所以我们在这里:
我有一个在 ggplot2 中制作的图,它利用geom_jitter()
,有效地为因子中的每个元素创建一行并绘制其值。我想为geom_violin()
绘图添加一个补充,但只是将额外的geom_
函数添加到绘图代码中会返回两层: thejitter
和 the violin
,一层在另一层之上(如通常预期的那样)。
编辑:
这就是情节的样子:
如何在violin
不生成第二个情节的情况下将其作为单独的行?支线任务:我怎样才能让jitter
和violin
geoms 交错?(即元素A抖动行后面跟着元素A小提琴行,然后元素B抖动行后面跟着元素B小提琴行)
这是制作它所需的最低代码(没有所有theme()
装饰):
P1 <- ggplot(data=TEST_STACK_SUB, aes(x=E, y=C, col=A)) +
theme(... , aspect.ratio=0.3) +
geom_point(position = position_jitter(w = 0.30, h = 0), alpha=0.2, size=0.5) +
geom_violin(data=TEST_STACK_SUB, mapping=aes(x=E, y=C), position="dodge") +
scale_x_discrete() +
scale_y_continuous(limits=c(0,1), breaks=seq(0,1,0.1),
labels=c(seq(0,1,0.1))) +
scale_color_gradient2(breaks=seq(0,100,20),
limits=c(0,100),
low="green3",
high="darkorchid4",
midpoint=50,
name="") +
coord_flip()
options(repr.plot.width=8, repr.plot.height=2)
plot(P1)
这是生成它的数据子集(供您尝试):
解决方案
如何将您的因子作为连续变量来操作并在aes()
调用中轻推条目,如下所示:
library(dplyr)
library(ggplot2)
set.seed(42)
tibble(x = rep(c(1, 3), each = 10),
y = c(rnorm(10, 2), rnorm(10))) -> plot_data
ggplot(plot_data) +
geom_jitter(aes(x = x - 0.5, y = y), width = 0.25) +
geom_violin(aes(x = x + 0.5, y = y, group = x), width = 0.5) +
coord_flip() +
labs(x = "x") +
scale_x_continuous(breaks = c(1, 3),
labels = paste("Level", 1:2),
trans = scales::reverse_trans())
推荐阅读
- c# - 获取随机对象并返回它的通用方法
- python - 在python中放置相应列的标题(不使用pandas)
- c++ - 使用 deque 实例化 priority_queue 不会编译 - 使用 vector 可以。这是为什么?
- react-native - react-native 应用程序未在模拟器上启动
- javascript - 如何将图像转换为base64?
- javascript - 如何将 PHP 变量传递给 JavaScript,类似于 WordPress wp_localize_script 函数
- c - 区分 C 中的各种声明
- php - 超过最大发送速率。SMTP 454 错误
- django - 在 AWS ELB Django 应用程序中禁用运行状况检查日志记录
- python - 如何从 MacOS 卸载本地 python 包