以下是我用来自动生成一些回归拟合的代码;
require(ggplot2)
# Prep data
nPts = 200
prepared=runif(nPts,0,10)
rich=5-((prepared-5)^2)/5 + 5*runif(length(prepared))
df <- data.frame(rich=rich, prepared=prepared)
deg = 1 # User variable
lm <- lm(df$rich ~ poly(df$prepared, deg, raw=T))
# Create expression
coefs <- lm$coefficients
eq <- paste0(round(coefs,2),'*x^', 0:length(coefs), collapse='+') # (1)
pl <- ggplot(df, aes(x=prepared, y=rich)) +
geom_point() +
geom_smooth(method = "lm", formula = y ~ poly(x,deg), size = 1) +
ggtitle(eq) # (2)
print(pl)
此代码应该运行(安装了ggplot2)。问题出在标记为1和2的行中:
我的标题是"6.54*x^0+0.09*x^1+6.54*x^2"
。但是我想要一个更有吸引力的渲染,以便(2)更像是可以看到:
ggtitle(expression(6.54*x^0+0.09*x^1+6.54*x^2)) # (2')
即,提升的权力,乘法量下降等等。任何帮助都非常赞赏!
答案 0 :(得分:1)
这是我为解决问题而建立的功能;
poly_expression <- function(coefs){
# build the string
eq <- paste0(round(coefs,2),'*x^', (1:length(coefs)-1), collapse='+')
# some cleaning
eq <- gsub('\\+\\-','-', eq) # +-n -> -n
eq <- gsub('\\*x\\^0','', eq) # n*x^0 <- n
eq <- gsub('x\\^1','x', eq) # n*x^1 <- nx
eq <- parse(text=eq) # return expressions
return(eq)
}
然后ggtitle(poly_expression(coefs))
根据需要呈现。