【发布时间】:2018-01-16 14:00:15
【问题描述】:
我想将 stat_density2D 函数与分类变量一起使用,但将我的绘图限制在高密度区域,以减少重叠并提高易读性。
我们以以下数据为例:
plot_data <-
data.frame(X = c(rnorm(300, 3, 2.5), rnorm(150, 7, 2)),
Y = c(rnorm(300, 6, 2.5), rnorm(150, 2, 2)),
Label = c(rep('A', 300), rep('B', 150)))
ggplot(plot_data, aes(X, Y, colour = Label)) + geom_point()
通过二维密度图,我们获得重叠密度
ggplot(plot_data, aes(X, Y)) +
stat_density_2d(geom = "polygon", aes(alpha = ..level.., fill = Label))
是否可以仅绘制高密度区域(例如level>0.03)?我找到的唯一解决方案是“作弊”并手动修改 ..levels.. 变量,可以使用阶跃函数或任何幂变换,就像这个简单的示例一样。
ggplot(plot_data, aes(X, Y)) +
stat_density_2d(geom = "polygon", aes(alpha = (..level..) ^ 2, fill = Label)) +
scale_alpha_continuous(range = c(0, 1))
除了修改..levels.. 变量之外,是否可以要求 ggplot2/stat_density2D 函数仅关注特定范围的密度级别?我尝试使用scale_alpha_continuous 函数的range 或limits 参数,但没有任何相关结果...
谢谢!
【问题讨论】:
-
您可以在
scale_alpha_continuous中使用limits,并设置上下限。外面的一切都将被忽略(默认情况下)。 -
请确保查看者能够理解绘制的区域不包含该组的所有数据。
-
感谢您的回答,但我不确定这是否足够。我同意这是合乎逻辑的,但据我尝试它不起作用,请参阅
ggplot(plot_data, aes(X,Y))+stat_density_2d(geom="polygon", aes(alpha=..level.., fill=Label)) + scale_alpha_continuous(limits=c(0.1,0.04))。顺便说一句你是对的,这种修改必须明确说明和解释