组合上标和包含 < 符号的变量标签时使用 ggplot geom_text
Using ggplot geom_text when combining superscript and variable label that contains < symbol
我在向多面图添加 R2 注释时遇到问题,我的 R2 值有时 <0.01(是的,这不是一个很好的回归)。我希望 R2 的 2 为上标。
我尝试了几种选择,但似乎被我的价值观中的 < 符号所阻碍
例如,使用 iris 数据集,我首先使用之前计算的 R2 值设置了一个新的数据框。 x 和 y 位置也被设置为每个方面都不同(对于 iris 数据集不是必需的,但它是我的)
SEr2s <- data.frame(Species = c("virginica", "setosa", "versicolor" ),
xpos = c(5,7,7), ypos = c(4.2, 2, 4.2),
lab = c("<0.01","0.08", "0.05"))
然后我运行我的剧情:
XYPlot<-ggplot(data = iris, aes(x=Sepal.Length)) +
geom_point(aes(y = Sepal.Width), colour="grey40")+
geom_smooth(aes(y = Sepal.Width), col="grey40", lwd=0.5, method="lm", se=FALSE) +
geom_text(data = SEr2s, size=3, vjust=0, hjust=0,
aes(x = xpos, y = ypos,
label = paste("r^2==",lab)), parse = TRUE)+
theme_bw() +
theme(strip.background = element_blank(), strip.placement = "outside",
panel.grid.minor = element_blank(), legend.position = "right") +
facet_wrap(~Species)
我收到这个错误:
Error in parse(text = text[[i]]) : :1:7: unexpected '<'
1: r^2== <
^
有没有办法更改我的代码或我的标签数据框,使其不尝试评估这些符号?
我认为更简单的解决方案是在 data.frame (SEr2s
) 中定义下标:
SEr2s <- data.frame(Species = c("virginica", "setosa", "versicolor" ),
xpos = c(5,7,7), ypos = c(4.2, 2, 4.2),
lab = c("atop(R^2<0.01)","atop(R^2==0.08)", "atop(R^2==0.05)"))
然后,你可以调用 ggplot 而不是 label=lab
:
ggplot(data = iris, aes(x=Sepal.Length)) +
geom_point(aes(y = Sepal.Width), colour="grey40")+
geom_smooth(aes(y = Sepal.Width), col="grey40", lwd=0.5, method="lm", se=FALSE) +
geom_text(data = SEr2s, size=3, vjust=0, hjust=0,
aes(x = xpos, y = ypos,
label = lab), parse = TRUE)+
theme_bw() +
theme(strip.background = element_blank(), strip.placement = "outside",
panel.grid.minor = element_blank(), legend.position = "right") +
facet_wrap(~Species)
我想这会给你想要的情节:
https://ibb.co/vwbvqp2
如果您改用 ggtext 包,则可以避免 plotmath,它可以处理基本 HTML/markdown 作为输入。
library(ggplot2)
library(ggtext)
SEr2s <- data.frame(Species = c("virginica", "setosa", "versicolor" ),
xpos = c(5,7,7), ypos = c(4.2, 2, 4.2),
lab = c("<0.01","0.08", "0.05"))
ggplot(data = iris, aes(x=Sepal.Length)) +
geom_point(aes(y = Sepal.Width), colour="grey40")+
geom_smooth(aes(y = Sepal.Width), col="grey40", lwd=0.5, method="lm", se=FALSE) +
geom_richtext(
data = SEr2s, size=3, vjust=0, hjust=0,
aes(x = xpos, y = ypos, label = paste0("r<sup>2</sup> = ", lab))
) +
theme_bw() +
theme(
strip.background = element_blank(), strip.placement = "outside",
panel.grid.minor = element_blank(), legend.position = "right") +
facet_wrap(~Species)
#> `geom_smooth()` using formula 'y ~ x'
由 reprex package (v0.3.0)
创建于 2019-12-02
我在向多面图添加 R2 注释时遇到问题,我的 R2 值有时 <0.01(是的,这不是一个很好的回归)。我希望 R2 的 2 为上标。 我尝试了几种选择,但似乎被我的价值观中的 < 符号所阻碍
例如,使用 iris 数据集,我首先使用之前计算的 R2 值设置了一个新的数据框。 x 和 y 位置也被设置为每个方面都不同(对于 iris 数据集不是必需的,但它是我的)
SEr2s <- data.frame(Species = c("virginica", "setosa", "versicolor" ),
xpos = c(5,7,7), ypos = c(4.2, 2, 4.2),
lab = c("<0.01","0.08", "0.05"))
然后我运行我的剧情:
XYPlot<-ggplot(data = iris, aes(x=Sepal.Length)) +
geom_point(aes(y = Sepal.Width), colour="grey40")+
geom_smooth(aes(y = Sepal.Width), col="grey40", lwd=0.5, method="lm", se=FALSE) +
geom_text(data = SEr2s, size=3, vjust=0, hjust=0,
aes(x = xpos, y = ypos,
label = paste("r^2==",lab)), parse = TRUE)+
theme_bw() +
theme(strip.background = element_blank(), strip.placement = "outside",
panel.grid.minor = element_blank(), legend.position = "right") +
facet_wrap(~Species)
我收到这个错误:
Error in parse(text = text[[i]]) : :1:7: unexpected '<' 1: r^2== < ^
有没有办法更改我的代码或我的标签数据框,使其不尝试评估这些符号?
我认为更简单的解决方案是在 data.frame (SEr2s
) 中定义下标:
SEr2s <- data.frame(Species = c("virginica", "setosa", "versicolor" ),
xpos = c(5,7,7), ypos = c(4.2, 2, 4.2),
lab = c("atop(R^2<0.01)","atop(R^2==0.08)", "atop(R^2==0.05)"))
然后,你可以调用 ggplot 而不是 label=lab
:
ggplot(data = iris, aes(x=Sepal.Length)) +
geom_point(aes(y = Sepal.Width), colour="grey40")+
geom_smooth(aes(y = Sepal.Width), col="grey40", lwd=0.5, method="lm", se=FALSE) +
geom_text(data = SEr2s, size=3, vjust=0, hjust=0,
aes(x = xpos, y = ypos,
label = lab), parse = TRUE)+
theme_bw() +
theme(strip.background = element_blank(), strip.placement = "outside",
panel.grid.minor = element_blank(), legend.position = "right") +
facet_wrap(~Species)
我想这会给你想要的情节:
如果您改用 ggtext 包,则可以避免 plotmath,它可以处理基本 HTML/markdown 作为输入。
library(ggplot2)
library(ggtext)
SEr2s <- data.frame(Species = c("virginica", "setosa", "versicolor" ),
xpos = c(5,7,7), ypos = c(4.2, 2, 4.2),
lab = c("<0.01","0.08", "0.05"))
ggplot(data = iris, aes(x=Sepal.Length)) +
geom_point(aes(y = Sepal.Width), colour="grey40")+
geom_smooth(aes(y = Sepal.Width), col="grey40", lwd=0.5, method="lm", se=FALSE) +
geom_richtext(
data = SEr2s, size=3, vjust=0, hjust=0,
aes(x = xpos, y = ypos, label = paste0("r<sup>2</sup> = ", lab))
) +
theme_bw() +
theme(
strip.background = element_blank(), strip.placement = "outside",
panel.grid.minor = element_blank(), legend.position = "right") +
facet_wrap(~Species)
#> `geom_smooth()` using formula 'y ~ x'
由 reprex package (v0.3.0)
创建于 2019-12-02