我有一个模型可以在不同的景观上运行,一次可以同时运行,一次可以分别运行。 我想将结果绘制在小提琴图中,但我希望两者在同一个图中并排运行,并且每个风景区都有自己的小提琴(因此,总共2堆中的 4小提琴强>)。 示例数据:
df1 <- data.frame('means' = 1:6, 'landscape' = rep(c('forest', 'desert', 3)))
df2 <- data.frame('means' = rep(c(1,2), 3), 'landscape' = rep(c('forest', 'desert', 3)))
我希望最终产品的外观如何(MS Paint中的插图,我是一个糟糕的艺术家):
绿色代表森林,金色代表沙漠。
答案 0 :(得分:4)
请注意,该帖子暗含询问“如何在彼此上方印刷小提琴字体?”。当然,这可以通过position
参数来回答,对于小提琴,该参数默认为'dodge'
-将其更改为'identity'
可以解决问题。旁白-要求“堆叠”实际上有点误导,因为position='stack'
会垂直堆叠它们。
这种方法尤其避免了笨拙的第二个数据集,因此可以轻松处理多种颜色。
library(tidyverse)
mpg %>%
filter(class %in% c("compact","midsize")) %>%
mutate(coloringArgument = paste(drv,class)) %>%
ggplot(aes(as.factor(drv), cty, color=coloringArgument)) +
geom_violin(position = "identity")
答案 1 :(得分:2)
使用ggplot
-您可以添加两个geom_violin()
,在第二个中使用新数据。
我使用mtcars
作为样本数据。
library(tidyverse)
df1 <- mtcars[1:15, ]
df2 <- mtcars[16:31, ]
df1 %>%
ggplot(aes(factor(vs), disp)) +
geom_violin() +
geom_violin(data = df2,
aes(factor(vs), disp))
如果可能的话,我认为更简单的方法是将数据帧合并为一个,并为每个数据帧创建一个密钥以供以后使用。
为了合并data.frame,我使用了bind_rows
,它将data.frame绑定在其他帧之上。自变量.id =
使我可以添加带有data.frame名称的新列。接下来,在ggplot
内,可以将aes
color
设置为您提供的data.frame ID。这将为每个data.frame赋予不同的颜色。另外,在position = "identity"
中添加geom_violin
可以使它们彼此堆叠。
bind_rows(list(df1 = df1, df2 = df2),
.id = "dfName") %>%
ggplot(aes(factor(vs), disp, color = dfName)) +
geom_violin(position = "identity")