如何使用公式格式化 ggplot `geom_text`,变得不需要 "c(...)"
How to format ggplot `geom_text` with formula, getting unwanted "c(...)"
在我的 ggplot2 code below, I want to show the formula for a linear-regression 适合我的情节 geom_text
,但我在 a
和 b
的值之前得到不需要的 c
,怎么办我阻止这个?
p <- ggplot(data=Algae, aes(x=a254, y=DOC))+
geom_point(color="blue",stat="identity") +
geom_smooth(method="lm",se=FALSE,color="red",formula=y~x)
model.lm <- lm(DOC~a254, data=Algae)
l <- list(a=format(coef(model.lm)[1], digits=4),
b=format(coef(model.lm)[2], digits=4),
r2=format(summary(model.lm)$r.squared, digits=4),
p=format(summary(model.lm)$coefficients[2,4], digits=4))
eq <- substitute(italic(DOC) == a - b %*% italic(a254)~","~italic(R)^2~"="~r2~",
"~italic(P)~"="~p, l)
p1 <- p + geom_text(aes(x =6, y = 0, label = as.character(as.expression(eq))), parse = TRUE)
p1
这是因为您首先format()
将您的数据转换为字符格式,然后尝试使用字符串进行计算。您可以这样解决问题:
首先,将您的列表转换为 data.frame
更方便,使用:
d <- as.data.frame(l)
应将这些值转换回数字,因为您还想在公式内进行算术运算:
d[] <- lapply(d, function(x) as.numeric(as.character(x)))
那么它应该可以正常工作:
eq <- substitute(italic(Sepal.Length) == a - b %*% italic(Petal.Length)~","~italic(R)^2~"="~r2~",
"~italic(P)~"="~p, d)
p + geom_text(aes(x =5, y = 0, label = as.character(as.expression(eq))), parse = TRUE)
您还可以使用 annotate()
将公式添加到绘图中,这样看起来会更好一些:
p + annotate('text', 7, 4,
label=paste("italic(Sepal.Length)==", d$a, "~-~", d$b, "~x~",
"~italic(Petal.Length)~';'~italic(r)^2==", d$r2,
"~italic(P)==", d$p),
parse=TRUE,
hjust=1, size=3.5)
产量:
数据:
library(ggplot2)
p <- ggplot(data=iris, aes(x=Petal.Length, y=Sepal.Length)) +
geom_point(color="blue", stat="identity") +
geom_smooth(method="lm", se=FALSE, color="red", formula=y~x)
model.lm <- lm(Sepal.Length ~ Petal.Length, data=iris)
l <- list(a=format(coef(model.lm)[1], digits=4),
b=format(coef(model.lm)[2], digits=4),
r2=format(summary(model.lm)$r.squared, digits=4),
p=format(summary(model.lm)$coefficients[2, 4], digits=4))
在我的 ggplot2 code below, I want to show the formula for a linear-regression 适合我的情节 geom_text
,但我在 a
和 b
的值之前得到不需要的 c
,怎么办我阻止这个?
p <- ggplot(data=Algae, aes(x=a254, y=DOC))+
geom_point(color="blue",stat="identity") +
geom_smooth(method="lm",se=FALSE,color="red",formula=y~x)
model.lm <- lm(DOC~a254, data=Algae)
l <- list(a=format(coef(model.lm)[1], digits=4),
b=format(coef(model.lm)[2], digits=4),
r2=format(summary(model.lm)$r.squared, digits=4),
p=format(summary(model.lm)$coefficients[2,4], digits=4))
eq <- substitute(italic(DOC) == a - b %*% italic(a254)~","~italic(R)^2~"="~r2~",
"~italic(P)~"="~p, l)
p1 <- p + geom_text(aes(x =6, y = 0, label = as.character(as.expression(eq))), parse = TRUE)
p1
这是因为您首先format()
将您的数据转换为字符格式,然后尝试使用字符串进行计算。您可以这样解决问题:
首先,将您的列表转换为 data.frame
更方便,使用:
d <- as.data.frame(l)
应将这些值转换回数字,因为您还想在公式内进行算术运算:
d[] <- lapply(d, function(x) as.numeric(as.character(x)))
那么它应该可以正常工作:
eq <- substitute(italic(Sepal.Length) == a - b %*% italic(Petal.Length)~","~italic(R)^2~"="~r2~",
"~italic(P)~"="~p, d)
p + geom_text(aes(x =5, y = 0, label = as.character(as.expression(eq))), parse = TRUE)
您还可以使用 annotate()
将公式添加到绘图中,这样看起来会更好一些:
p + annotate('text', 7, 4,
label=paste("italic(Sepal.Length)==", d$a, "~-~", d$b, "~x~",
"~italic(Petal.Length)~';'~italic(r)^2==", d$r2,
"~italic(P)==", d$p),
parse=TRUE,
hjust=1, size=3.5)
产量:
数据:
library(ggplot2)
p <- ggplot(data=iris, aes(x=Petal.Length, y=Sepal.Length)) +
geom_point(color="blue", stat="identity") +
geom_smooth(method="lm", se=FALSE, color="red", formula=y~x)
model.lm <- lm(Sepal.Length ~ Petal.Length, data=iris)
l <- list(a=format(coef(model.lm)[1], digits=4),
b=format(coef(model.lm)[2], digits=4),
r2=format(summary(model.lm)$r.squared, digits=4),
p=format(summary(model.lm)$coefficients[2, 4], digits=4))