多种颜色的小提琴情节
Violin plot with multiple colors
我想生成一个小提琴图,其中不同的区域用不同的颜色填充。
例如:
df <- data.frame("data" = runif(1000))
ggplot(df, aes(x ="DATA", y = data)) + geom_violin(aes(fill = if_else(data > 0.5, "green","red")))
上面的命令生成了下图所示的小提琴图。小提琴情节由 2 个独立的部分组成。我期待一个完整的形状(即没有物理分离),其中上部(数据 >0.5)为绿色,下部为红色。
我知道有一个着色问题。但是,我想问的是:
- 为什么剧情分成两部分?
- 有没有办法让它成为一个单一的“主体”,就像在普通的小提琴情节中一样?
我发现以下解决方案具有多色小提琴图,但在我的情况下不起作用:
谢谢。
链接的答案显示了一种通过构建绘图和调整底层 grob 来实现此目的的巧妙方法,但如果您想在没有 grob-hacking 的情况下执行此操作,则需要获得自己的密度曲线并绘制它们带有多边形:
df <- data.frame("data" = runif(1000))
dens <- density(df$data)
new_df1 <- data.frame(y = c(dens$x[dens$x < 0.5], rev(dens$x[dens$x < 0.5])),
x = c(-dens$y[dens$x < 0.5], rev(dens$y[dens$x < 0.5])),
z = 'red2')
new_df2 <- data.frame(y = c(dens$x[dens$x >= 0.5], rev(dens$x[dens$x >= 0.5])),
x = c(-dens$y[dens$x >= 0.5], rev(dens$y[dens$x >= 0.5])),
z = 'green3')
ggplot(rbind(new_df1, new_df2), aes(x, y, fill = z)) +
geom_polygon() +
scale_fill_identity() +
scale_x_continuous(breaks = 0, expand = c(1, 1), labels = 'DATA', name = '')
我想生成一个小提琴图,其中不同的区域用不同的颜色填充。 例如:
df <- data.frame("data" = runif(1000))
ggplot(df, aes(x ="DATA", y = data)) + geom_violin(aes(fill = if_else(data > 0.5, "green","red")))
上面的命令生成了下图所示的小提琴图。小提琴情节由 2 个独立的部分组成。我期待一个完整的形状(即没有物理分离),其中上部(数据 >0.5)为绿色,下部为红色。
我知道有一个着色问题。但是,我想问的是:
- 为什么剧情分成两部分?
- 有没有办法让它成为一个单一的“主体”,就像在普通的小提琴情节中一样?
我发现以下解决方案具有多色小提琴图,但在我的情况下不起作用:
谢谢。
链接的答案显示了一种通过构建绘图和调整底层 grob 来实现此目的的巧妙方法,但如果您想在没有 grob-hacking 的情况下执行此操作,则需要获得自己的密度曲线并绘制它们带有多边形:
df <- data.frame("data" = runif(1000))
dens <- density(df$data)
new_df1 <- data.frame(y = c(dens$x[dens$x < 0.5], rev(dens$x[dens$x < 0.5])),
x = c(-dens$y[dens$x < 0.5], rev(dens$y[dens$x < 0.5])),
z = 'red2')
new_df2 <- data.frame(y = c(dens$x[dens$x >= 0.5], rev(dens$x[dens$x >= 0.5])),
x = c(-dens$y[dens$x >= 0.5], rev(dens$y[dens$x >= 0.5])),
z = 'green3')
ggplot(rbind(new_df1, new_df2), aes(x, y, fill = z)) +
geom_polygon() +
scale_fill_identity() +
scale_x_continuous(breaks = 0, expand = c(1, 1), labels = 'DATA', name = '')