我对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))
})
答案 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
添加其他信息(即年份?)