5

以下代码:

library(ggplot2)
theData <- data.frame(category <- sample(LETTERS[1:3], 1000, replace = T),
                  value <- rnorm(1000))
thePlot <- ggplot(theData,
              aes(x = category, y = value))
thePlot <- thePlot + geom_violin(fill = "BLACK")
thePlot <- thePlot + coord_flip()
print(thePlot)

将产生这个情节:

小提琴情节示例

但我想实现一种效果,即每个小提琴密度的填充(和颜色,理想情况下)的 alpha 值在密度较低的区域降低。也就是说,小提琴形状在曲线高度较小的地方逐渐消失在背景中,而在曲线高度较高的地方则是黑暗和不透明的。类似这种效果的东西:

alpha 渐变示例

不幸的是,这些系数图是通过使用一个非常丑陋的 hack 生成的,并且考虑到新 geom_violin 的灵活性,我想知道在使用 geom_violin 时是否有一种直接的方法来实现这个 alpha 淡入淡出。

感谢您提供的任何见解!

4

2 回答 2

3

受到@wch 回答的启发,我决定再试一次。这和我得到的一样接近:

ggplot(theData, aes(x = category, y = value)) +
    stat_ydensity(geom="segment", aes(xend=..x..+..scaled../2, 
        yend=..y.., alpha=..scaled..), size=2, trim=FALSE) +
    stat_ydensity(geom="segment", aes(xend=..x..-..scaled../2, 
        yend=..y.., alpha=..scaled..), size=2, trim=FALSE) +
    scale_alpha_continuous(range= c(0, 1)) +
    coord_flip() + theme_bw()

在此处输入图像描述

在早期版本中ggplot2,情节显示“带”,但这个问题现在显然已得到解决。

在此处输入图像描述

于 2012-06-11T17:06:03.443 回答
1

这实际上是可能的,通过使用一些技巧stat_ydensity

library(ggplot2)
theData <- data.frame(category <- sample(LETTERS[1:3], 1000, replace = T),
                  value <- rnorm(1000))

ggplot(theData, aes(x = category, y = value)) +
    stat_ydensity(geom="line", aes(alpha=..scaled..), size=2, trim=FALSE) +
    scale_alpha_continuous(range= c(0, 1)) +
    coord_flip() + theme_bw()
于 2012-06-11T06:30:57.870 回答