r - 计算和显示 ggplot2::geom_density() 对象的峰值的最佳方法是什么?
问题描述
我试图找到一种简单直观的方法来计算和显示 ggplot2::geom_density() 对象的峰值。
这个博客解释了如何在基础 R 中做到这一点,但它是一个多步骤的过程。
但是使用ggpmisc包的 stat_peaks() 函数似乎更直观。
但是,当运行下面的代码时,我得到了错误:stat_peaks requires the following missing aesthetics: y
library(tidyverse)
library(ggpmisc)
ggplot(iris, aes(x = Petal.Length)) +
geom_density() +
stat_peaks(colour = "red")
创建 geom_density() 时,您不需要提供任何美学。
因此,如果确实 stat_peaks 是要走的路,有没有办法解决这个问题?也许对我的问题有更好的解决方案。
解决方案
这是一个简单的解决方法。这个想法是调用ggplot_build
,让我们ggplot
为您进行计算,然后y
从结果对象中提取所需的美学,这就是density
您的情况。
library(ggplot2)
library(ggpmisc)
p <- ggplot(iris, aes(x = Petal.Length)) +
geom_density()
pb <- ggplot_build(p)
p + stat_peaks(
data = pb[['data']][[1]], # take a look at this object
aes(x = x, y = density),
colour = "red",
size = 3
)
我确信这种方法可以通过一个 ggplot2 向导来改进,它可以解释为什么这不起作用......
ggplot(iris, aes(x = Petal.Length, y = stat(density))) +
geom_density() +
stat_peaks()
错误:stat_peaks 需要以下缺失的美学:y
...这是我的第一个猜测。
推荐阅读
- angular - Selenium 查看 Toggle Accordian 是否使用 HTML 属性扩展
- python-3.x - python中百分位数计算中的目标搜索
- c++ - 我在 Visual Studio 中使用 MSVC(Microsoft 编译器),我想用 clang 或 GCC 编译?
- rust - 如何测试 RAII?
- php - 我如何使 php 按值名称排序
- php - FOREACH 具有来自数组的特定键
- c# - 未在操作方法上声明时如何从提交的表单中获取值?
- c# - GitHub Octokit GitHubClient.Repository.Content.GetAllContents 永远不会返回
- javascript - 为什么结果不一样??JavaScript
- text - iOS 14 Text() 带天数计时器