【问题标题】:Add geom_hline to legend将 geom_hline 添加到图例
【发布时间】:2019-08-21 02:25:27
【问题描述】:

在昨天和今天都在网上搜索之后,我得到一个传奇人物的唯一方法是在这篇文章中遵循“Brian Diggs”的解决方案: Add legend to ggplot2 line plot

这给了我以下代码:

library(ggplot2)
ggplot()+
  geom_line(data=myDf, aes(x=count, y=mean, color="TrueMean"))+
  geom_hline(yintercept = myTrueMean, color="SampleMean")+
  scale_colour_manual("",breaks=c("SampleMean", "TrueMean"),values=c("red","blue"))+
  labs(title = "Plot showing convergens of Mean", x="Index", y="Mean")+
  theme_minimal()

如果我删除hline 的颜色,一切正常,但如果我在hline 的颜色中添加一个不是实际颜色的值(如"SampleMean"),我会收到一个错误,它不是一种颜色(仅适用于hline)。 怎么会加一个传说这么大的普通东西这么大的问题?还有更简单的方法吗?

创建原始数据:

#Initial variables
myAlpha=2
myBeta=2
successes=14
n=20
fails=n-successes

#Posterior values
postAlpha=myAlpha+successes
postBeta=myBeta+fails

#Calculating the mean and SD
myTrueMean=(myAlpha+successes)/(myAlpha+successes+myBeta+fails)
myTrueSD=sqrt(((myAlpha+successes)*(myBeta+fails))/((myAlpha+successes+myBeta+fails)^2*(myAlpha+successes+myBeta+fails+1)))

#Simulate the data
simulateBeta=function(n,tmpAlpha,tmpBeta){
  tmpValues=rbeta(n, tmpAlpha, tmpBeta)
  tmpMean=mean(tmpValues)
  tmpSD=sd(tmpValues)
  returnVector=c(count=n, mean=tmpMean, sd=tmpSD)
  return(returnVector)
}

#Make a df for the data
myDf=data.frame(t(sapply(2:10000, simulateBeta, postAlpha, postBeta)))

【问题讨论】:

    标签: r ggplot2 geom-hline


    【解决方案1】:

    给定的解决方案在大多数情况下都有效,但不适用于geom_hline (vline)。对于它们,您通常不必使用aes,但是当您需要生成图例时,您必须将它们包装在aes 中:

    library(ggplot2)
    ggplot() +
      geom_line(aes(count, mean, color = "TrueMean"), myDf) +
      geom_hline(aes(yintercept = myTrueMean, color = "SampleMean")) +
      scale_colour_manual(values = c("red", "blue")) +
      labs(title = "Plot showing convergens of Mean",
           x = "Index",
           y = "Mean",
           color = NULL) +
      theme_minimal()
    


    看到原始数据,您可以使用geom_point 进行更好的可视化(还添加了一些主题更改):

    ggplot() +
      geom_point(aes(count, mean, color = "Observed"), myDf,
                 alpha = 0.3, size = 0.7) +
      geom_hline(aes(yintercept = myTrueMean, color = "Expected"),
                 linetype = 2, size = 0.5) +
      scale_colour_manual(values = c("blue", "red")) +
      labs(title = "Plot showing convergens of Mean",
           x = "Index",
           y = "Mean",
           color = "Mean type") +
      theme_minimal() +
      guides(color = guide_legend(override.aes = list(
        linetype = 0, size = 4, shape = 15, alpha = 1))
      )
    

    【讨论】:

    • 谢谢,我会调查的。我还添加了如何生成原始数据。
    • 效果很好,谢谢!请注意,您在图例中交换了真实均值和样本均值。
    • @Jesper.Lindberg 添加了一些视觉变化:)
    猜你喜欢
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 2013-06-10
    • 1970-01-01
    • 2017-12-04
    • 2018-12-22
    • 1970-01-01
    相关资源
    最近更新 更多