将ggplot2选项geom_hline添加为字符串

时间:2016-05-19 12:43:35

标签: r string ggplot2 eval

我对ggplot2有疑问。抱歉,因为函数是以闪亮方式调用的,所以不提供示例数据。如果需要,我将尝试构建一个没有闪亮代码的最小示例。但我希望问题可能很简单,无需重新运行代码就可以得到答案。

我尝试给ggplot函数提供几个geom_hline选项,这些函数在for循环中创建为字符串。 struct$Retention是一些数值。

问题是eval(parse(text = horizLine))尝试评估字符串,因此尝试添加+字符串,这会导致以下错误:

Warning: Error in +: non-numeric argument to binary operator
Stack trace (innermost first):
    78: eval [<text>#1]
    77: eval
    76: renderPlot [plots.R#11]
    68: output$ClaimPlot
    1: runApp

所以我要搜索的是一种给字符串添加+函数作为ggplot函数选项的方法。 或者给ggplot提供选项的另一种方法。

output$ClaimPlot <- renderPlot({
  x    <- readClaimData()
  struct <- readStructData()
  horizLine <- c()
  for( i in 1:length( struct$Retention )) {
        horizLine[i] <- paste("geom_hline(aes(yintercept =", as.numeric(struct$Retention[i]), "))", sep = "")
  }
  horizLine <- paste(horizLine, sep = "", collapse = " + ")
  x <- melt(x, id.vars = c("Year", "ClaimNo"), variable.name = "State", value.name = c("Claim"))
  ggplot(data = x, aes(x=factor(ClaimNo), y=Claim, fill = factor(State))) + 
    geom_bar(colour = "black", stat = "identity") + 
    ylab("Claim Size") +
    xlab("Claim Number") +
    facet_grid(Year ~ .) +
    eval(parse(text = horizLine))
})

1 个答案:

答案 0 :(得分:1)

您是否有理由不能将struct数据框传递给geom_hline

这样的事情:

ggplot(data = x, aes(x=factor(ClaimNo), y=Claim, fill = factor(State))) + 
    geom_bar(colour = "black", stat = "identity") + 
    ylab("Claim Size") +
    xlab("Claim Number") +
    facet_grid(Year ~ .) +
    geom_hline(data=struct, aes(yintercept=Retention))

根据您正在寻找的具体内容,您可能需要向struct添加其他信息(即年份?)