在 ggplot2 中添加新几何作为新行,防止绘图分层
Add new geom as new row in ggplot2, preventing layering of plots
我很确定这很容易做到,但我似乎找不到将此问题查询到 google 或堆栈中的正确方法,所以我们在这里:
我在 ggplot2 中绘制了一个图,它利用 geom_jitter()
,有效地为因子中的每个元素创建一行并绘制其值。
我想在情节中添加一个补充 geom_violin()
,但只是将额外的 geom_
函数添加到情节代码 returns 两层:jitter
和 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)
这里是生成它的数据子集(供您尝试):
data
如何将你的因子作为一个连续变量来操纵,并像这样在 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())
我很确定这很容易做到,但我似乎找不到将此问题查询到 google 或堆栈中的正确方法,所以我们在这里:
我在 ggplot2 中绘制了一个图,它利用 geom_jitter()
,有效地为因子中的每个元素创建一行并绘制其值。
我想在情节中添加一个补充 geom_violin()
,但只是将额外的 geom_
函数添加到情节代码 returns 两层:jitter
和 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)
这里是生成它的数据子集(供您尝试): data
如何将你的因子作为一个连续变量来操纵,并像这样在 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())