【问题标题】:how to use stat_peaks with a density plot in ggplot如何在ggplot中使用带有密度图的stat_peaks
【发布时间】:2019-11-07 13:17:09
【问题描述】:

我有一个看起来像这样的图表,并想在上面绘制峰值:

这是我当前的代码:

  ggplot(df,aes(x=xval,fill=sample)) + 
  geom_density(alpha=.5)+
  xlim(c(median(xval)-0.001,median(xval)+0.001))+
  labs(title=paste0("Title ",datetoday),x="intensity",fill="concentration")+
  ggsave((paste0("file ",datetoday,".png")))

每当我尝试将 stat_peaks 添加到我的图表时,它都会给我错误“错误:stat_peaks 需要以下缺失的美学:y” - 但我不确定如何将 y 值设置为密度。

TIA

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    这个问题之前是answered

    您可以通过三个步骤完成此操作:

    1. 绘制密度图
    2. 使用ggplot_build 生成绘图的“构建”对象
    3. 从“构建”对象中提取峰值并绘制它们
    library(ggplot2)
    library(ggpmisc)
    
    p <- ggplot(df,aes(x=xval,fill=sample)) + 
      geom_density(alpha=.5)+
      xlim(c(median(xval)-0.001,median(xval)+0.001))+
      labs(title=paste0("Title ",datetoday),x="intensity",fill="concentration")
    
    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
    )
    ggsave((paste0("file ",datetoday,".png")))
    

    【讨论】:

    • 谢谢,我尝试了该代码,但收到此错误:“错误:美学必须是长度 1 或与数据 (2560) 相同:填充”。我假设是因为我有多个填充,而上一个问题中的数据只是一个填充。
    • 是的,这可能是由于sample 分组的原因,但是如果没有您使用的数据框,复制起来有点困难。如果将aes(x = x, y = density) 替换为aes(x = x, y = density, fill = NA) 是否有效?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多