Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 用组名及其方程标记ggplot,可能用ggpmisc?_R_Ggplot2_Ggpmisc - Fatal编程技术网

R 用组名及其方程标记ggplot,可能用ggpmisc?

R 用组名及其方程标记ggplot,可能用ggpmisc?,r,ggplot2,ggpmisc,R,Ggplot2,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, gr

我想给我的图贴上标签,可能使用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

手动解决方案怎么样,您可以将您的方程添加为geom_文本

优点:高度定制/缺点:需要根据公式手动编辑

这里,使用您的示例和线性回归:

图书馆管理员 df_标签%group_byfactor_cyl%>% summariseInter=lmmpg~wt$系数[1], 系数=lmmpg~wt$系数[2]]>%ungroup%>% mutateypos=maxdf\U mtcars$mpg*1-0.05*行数%>%
mutateLabel2=pastefactor_cyl,~Cylincles:~,italicy==,roundInter,2,ifelseCoeff使用公式标记的替代方法是使用拟合线标记。以下是根据一个相关问题的答案改编的方法


第一个示例将标签放在等式的右侧,部分是手动的。另一方面,编写代码非常简单。之所以这样做,是因为从图层功能统计和几何图形中可以看出,组始终存在于数据中

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

这在这个例子中非常有效。我猜另一个缺点是它需要一些额外的捏造来处理facet,其中facet可能与分组所基于的变量相同,也可能不同。看起来这可以用代码来处理,比如我肯定会看看这个问题的解决方案,为组标签、方程、r2和p值创建一个字符串,这已经讨论过了。这种方法的另一个优点是,它看起来很容易在开始时指定x和y变量,例如x_var Yes,我认为,通过添加一个包含facet变量的补充列,可以很容易地解决facet显示问题,例如group_bycolor var,facet var应该可以完成这项工作。我现在的问题是能够将2位数字解析为当前的数字显示。我刚刚测试了用于颜色的同一变量的刻面。问题是要设置正确的y_位置,因此这意味着要在geom-text中手动设置y。以前我的首选订单标签没有更合理的意义吗?但为了简单起见,它得分很高!O、 K.添加了第二个示例,将标签放在前面。我花了一点时间来思考这个问题。大声思考:所以向量c4,6,8在粗体之后。。。可以作为因子的级别传入,stat[group]提供与正确级别对应的数字。对我来说,如果我做我的标签级别是的,应该可以,一个困难的方法是更改stat_poly_eq,默认情况下不将rr.label映射到label,而是将label列从其输入复制到其输出。然后,可以使用stat和其他标签访问您想要的因子文本。第二种方法很容易实现。。。我现在很忙,但我会提出问题并将其牢记在心。我需要调查,如果有任何简单的方法查询映射从一个统计。。。
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
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