我尝试在R中使用ggplot生成等高线图,但只保留图的顶层。例如,使用以下玩具数据:
df <- data.frame(x=rnorm(2000, 10, 3), y=rnorm(2000, 10, 3))
stat_density_plot <- ggplot(df, aes(x, y)) +
geom_point() +
stat_density_2d(aes(fill = ..level..), geom = "polygon", bins=15)
geom_density_plot <- ggplot(df, aes(x, y)) +
geom_point() +
geom_density_2d(bins = 15, color = "red")
我希望在stat_density_plot中只绘制前4个水平,在geom_density_plot中只绘制最里面的4个等高线。
我一直在考虑自己生成核密度估计(MASS::kde2d(df$x, df$y)
)并手动删除所有其余层的想法,但我仍然不知道如何使用ggplot绘制结果。
任何关于如何生成这两个图中的任何一个的见解都将是最受欢迎的。
2条答案
按热度按时间dzjeubhm1#
您可以使用
layer_data()
来获取ggplot用于创建多边形/线的实际数据,并专注于您想要的级别。wribegjk2#
免责声明:此答案基于此问题How to plot a contour line showing where 95% of values fall within, in R and in ggplot2中的答案
您可以手动计算内核密度esitmate,并通过指定概率间隔,使用结果数据更好地控制图上显示的内容。
原始图中有15个箱,因此这是本例中中断的基数(
1/15
)。生成的图将仅显示前4个等高线。