r - 用组名及其方程标记 ggplot,可能用 ggpmisc?
问题描述
我想标记我的情节,可能使用来自 ggpmisc 的方程式方法来提供链接到颜色和方程式的信息标签(然后我可以完全删除图例)。例如,在下图中,理想情况下,方程 LHS 中的因子水平为 4、6 和 8。
library(tidyverse)
library(ggpmisc)
df_mtcars <- mtcars %>% mutate(factor_cyl = as.factor(cyl))
p <- ggplot(df_mtcars, aes(x = wt, y = mpg, group = factor_cyl, colour= factor_cyl))+
geom_smooth(method="lm")+
geom_point()+
stat_poly_eq(formula = my_formula,
label.x = "centre",
#eq.with.lhs = paste0(expression(y), "~`=`~"),
eq.with.lhs = paste0("Group~factor~level~here", "~Cylinders:", "~italic(hat(y))~`=`~"),
aes(label = paste(..eq.label.., sep = "~~~")),
parse = TRUE)
p
有一种解决方法是在之后使用此处描述的技术修改绘图,但肯定有更简单的方法吗?
p <- ggplot(df_mtcars, aes(x = wt, y = mpg, group = factor_cyl, colour= factor_cyl))+
geom_smooth(method="lm")+
geom_point()+
stat_poly_eq(formula = my_formula,
label.x = "centre",
eq.with.lhs = paste0(expression(y), "~`=`~"),
#eq.with.lhs = paste0("Group~factor~level~here", "~Cylinders:", "~italic(hat(y))~`=`~"),
aes(label = paste(..eq.label.., sep = "~~~")),
parse = TRUE)
p
# Modification of equation LHS technique from:
# https://stackoverflow.com/questions/56376072/convert-gtable-into-ggplot-in-r-ggplot2
temp <- ggplot_build(p)
temp$data[[3]]$label <- temp$data[[3]]$label %>%
fct_relabel(~ str_replace(.x, "y", paste0(c("8","6","4"),"~cylinder:", "~~italic(hat(y))" )))
class(temp)
#convert back to ggplot object
#https://stackoverflow.com/questions/56376072/convert-gtable-into-ggplot-in-r-ggplot2
#install.packages("ggplotify")
library("ggplotify")
q <- as.ggplot(ggplot_gtable(temp))
class(q)
q
解决方案
第一个示例将标签放在等式的右侧,并且部分是手动的。另一方面,编码非常简单。之所以有效,是因为group
它始终存在于data
层函数(统计和几何)中。
library(tidyverse)
library(ggpmisc)
df_mtcars <- mtcars %>% mutate(factor_cyl = as.factor(cyl))
my_formula <- y ~ x
p <- ggplot(df_mtcars, aes(x = wt, y = mpg, group = factor_cyl, colour = factor_cyl)) +
geom_smooth(method="lm")+
geom_point()+
stat_poly_eq(formula = my_formula,
label.x = "centre",
eq.with.lhs = "italic(hat(y))~`=`~",
aes(label = paste(stat(eq.label), "*\", \"*",
c("4", "6", "8")[stat(group)],
"~cylinders.", sep = "")),
label.x.npc = "right",
parse = TRUE) +
scale_colour_discrete(guide = FALSE)
p
事实上,通过一点额外的杂耍,几乎可以回答这个问题。我们需要通过显式粘贴来添加lhsaes()
,以便我们可以根据计算变量在其左侧添加粘贴文本。
library(tidyverse)
library(ggpmisc)
df_mtcars <- mtcars %>% mutate(factor_cyl = as.factor(cyl))
my_formula <- y ~ x
p <- ggplot(df_mtcars, aes(x = wt, y = mpg, group = factor_cyl, colour = factor_cyl)) +
geom_smooth(method="lm")+
geom_point()+
stat_poly_eq(formula = my_formula,
label.x = "centre",
eq.with.lhs = "",
aes(label = paste("bold(\"", c("4", "6", "8")[stat(group)],
" cylinders: \")*",
"italic(hat(y))~`=`~",
stat(eq.label),
sep = "")),
label.x.npc = "right",
parse = TRUE) +
scale_colour_discrete(guide = FALSE)
p
推荐阅读
- python - 如何“存储”随机状态生成器状态
- swift - 是否可以添加按钮
到 SwiftUI 中的文本? - kaggle - 如何从 kaggle 网站下载单个文件?
- reactjs - 为什么 redux 多次初始化
- c++ - 如何从 amd gpus 的显示输出中获取图像数据?
- firebase - 如何使用 Firebase DataSnapshot firebase 和 Flutter Dart 中的两个参数进行过滤
- javascript - Gatsby 应用程序不会在边缘渲染,即。[ HTML1300, SCRIPT5009: SCRIPT5009: 'PerformanceObserver' 未定义]
- python - 如果文件名是字符串列表的子字符串,则使用父字符串重命名文件
- typescript - 泛型创建一个带有字符串和 trype 的对象
- sql - 通过连接表选择其他列的计数(Oracle SQL)