代码之家  ›  专栏  ›  技术社区  ›  lisaohhh

plot_mode()在主题功能中保持返回NULL

  •  0
  • lisaohhh  · 技术社区  · 3 年前

    我正在使用plot_mode()预测函数进行多元线性回归,无法修改美学。我已经读到它是sjplot包的一部分,也是ggplot的包装器。虽然我已经非常熟练地修改/调试ggplot美学,但我发现这在这里不起作用。

    它在我的代码中按原样绘制得很好。我为变量放置了占位符名称。

    library(sjPlot)
    library(performance)
    library(ggplot2)
    library(sjmisc)
    
    setwd("C:/Users/directory/")
    
    df=read.csv('example.csv')
    df$id=factor(df$id)
    df$course=factor(df$course)
    
    lm_mod=lm(data=df, score~var1+var2+var3)
    summary(lm_mod)
    
    prediction = plot_model(lm_mod, 
              type="pred", 
              show.data=TRUE,
              dot.size = 1,
              )
    
    prediction
    

    一旦我添加主题,它就会返回NULL。

    prediction + set_theme(base = theme_minimal())
    

    我想调整轴的比例/限制,以匹配我的其他ggplot制作的数字。我也想修正的轴的文本大小。下图,删除了变量名

    example output, 1 of 3

    如果我尝试sjplot或ggplot中的任何内容来修改美学/主题,它们都会普遍返回“NULL”。下面的一些示例:

    > prediction + font_size(axis_title.x=28)
    NULL
    > prediction + font_size(28)
    NULL
    > prediction + set_theme(base = theme_minimal())
    NULL
    > prediction + theme_sjplot(base_size = 24, base_family="")
    NULL
    > prediction + theme(text=element_text(size=22),  
    +                    axis.title = element_text(size=28, 
    +                                              face="bold" ),  
    +                    axis.text = element_text(size=24), 
    +                    axis.line = element_line(colour = "black", 
    +                                             size = 1, 
    +                                             linetype = "solid"),
    +                    plot.title = element_text(size=28,
    +                                              face="bold",
    +                                              vjust=2,
    +                                              hjust=0.5))
    NULL
    

    我看过相关的帖子。请帮忙!我很难解决这个问题。

    1 回复  |  直到 3 年前
        1
  •  1
  •   neilfws    3 年前

    如果您查看帮助页面 ?plot_model ,在“值”下声明:

    根据绘图类型,plot_mode()返回ggplot对象或此类对象的列表。

    下面是一个简单的例子:

    library(sjPlot)
    library(ggplot2)
    
    lm1 <- lm(mpg ~ wt, data = mtcars)
    
    p1 <- plot_model(lm1)
    p2 <- plot_model(lm1, type = "pred")
    
    class(p1)
    [1] "gg"     "ggplot"
    
    class(p2)
    [1] "list"
    

    所以 p1 是一个 ggplot 对象,您可以这样做:

    p1 + theme_bw()
    

    但是 p2 是一个命名列表。它的名称来源于模型中的自变量。如果您尝试将主题添加到列表中,则会得到NULL。

    names(p2)
    [1] "wt"
    
    p2 + theme_bw()
    NULL
    

    因此,要访问 ggplot图 作为列表的一部分,您可以执行以下操作:

    p2$wt + theme_bw()
    

    或者这样:

    p2[[1]] + theme_bw()
    

    对于多个自变量,您将为每个自变量获得一个列表元素。在您的情况下:

    prediction$var1
    prediction$var2
    prediction$var3