以下代码:
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)
将产生这个情节:
但我希望达到这样的效果,即每个小提琴密度的填充(和理想的颜色)的α值在不太密集的区域中减小。也就是说,小提琴形状逐渐消失在曲线高度较小的背景中,但是在曲线高的地方是暗的和不透明的。像这种效果的东西:
不幸的是,这些系数图是通过使用非常丑陋的黑客产生的,并且考虑到新geom_violin的灵活性,我想知道是否有一种直接的方法来实现这种使用geom_violin的alpha淡入淡出。
感谢您提供的任何见解!
答案 0 :(得分: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
的早期版本中,情节显示“乐队”,但此问题现在显然已得到修复。
答案 1 :(得分: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()