使用 ggplot 创建多个堆叠的小提琴图
Create multiple stacked violin plots with ggplot
我有一个在不同景观上运行的模型,一次同时运行,一次单独运行。
我想在小提琴情节中绘制结果,但我希望在同一个情节中并排运行,并且每个景观都有自己的小提琴(所以集体 4 2 stacks 小提琴)。
示例数据:
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 中的插图,我是一个糟糕的艺术家):
绿色代表森林,金色代表沙漠。
使用 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.frames,我使用了 bind_rows
,它将 data.frames 绑定在其他之上。参数 .id =
使我能够添加一个带有 data.frame 名称的新列。接下来,在 ggplot
中,您可以将 aes
color
设置为您提供的 data.frame id。这将为每个 data.frame 赋予不同的颜色。此外,在 geom_violin
中添加 position = "identity"
可以让它们相互堆叠。
bind_rows(list(df1 = df1, df2 = df2),
.id = "dfName") %>%
ggplot(aes(factor(vs), disp, color = dfName)) +
geom_violin(position = "identity")
请注意,此 post 隐含地询问 "how to have violin geoms printed above each other?"。这当然是通过 position
参数来回答的,小提琴默认为 'dodge'
- 将其更改为 'identity'
就可以了。小旁注 - 要求 "stacking" 实际上有点误导,因为 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")
我有一个在不同景观上运行的模型,一次同时运行,一次单独运行。 我想在小提琴情节中绘制结果,但我希望在同一个情节中并排运行,并且每个景观都有自己的小提琴(所以集体 4 2 stacks 小提琴)。 示例数据:
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 中的插图,我是一个糟糕的艺术家):
绿色代表森林,金色代表沙漠。
使用 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.frames,我使用了 bind_rows
,它将 data.frames 绑定在其他之上。参数 .id =
使我能够添加一个带有 data.frame 名称的新列。接下来,在 ggplot
中,您可以将 aes
color
设置为您提供的 data.frame id。这将为每个 data.frame 赋予不同的颜色。此外,在 geom_violin
中添加 position = "identity"
可以让它们相互堆叠。
bind_rows(list(df1 = df1, df2 = df2),
.id = "dfName") %>%
ggplot(aes(factor(vs), disp, color = dfName)) +
geom_violin(position = "identity")
请注意,此 post 隐含地询问 "how to have violin geoms printed above each other?"。这当然是通过 position
参数来回答的,小提琴默认为 'dodge'
- 将其更改为 'identity'
就可以了。小旁注 - 要求 "stacking" 实际上有点误导,因为 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")