【问题标题】:How to make the plots for some variables invisible?如何使某些变量的图不可见?
【发布时间】:2023-04-11 00:54:01
【问题描述】:

我正在使用出色的 dwplot 包(基于 ggplot 构建)来创建点须图。它们看起来很棒,但为了展示我的结果,我希望能够一次显示一个变量(一行)。因此,第一个图的结果对除第 1 行之外的所有结果都是不可见的,第二个图的第 1 行和第 2 行可见,等等。

我想知道是否有一个好的方法可以做到这一点?例如,有没有办法只设置变量子集的 alpha = 0?

例如运行

library(dotwhisker)
dwplot(lm(mpg ~ wt + gear + carb, data = mtcars))

给出以下情节。

我想创建一个图,其中“齿轮”和“碳水化合物”文本出现在左侧,但图没有出现。然后我可以依次显示系数和置信区间。

【问题讨论】:

  • 谢谢 - 我添加了更多细节。
  • 您是否正在考虑可能会产生诸如 gganimate 之类的动画风格的东西,或者会在随后的每一行中显示更多单独的图像 - 就像您可能在演示文稿中使用的那样?
  • 我打算在演示文稿中使用它,所以我认为多张图片很好。
  • 在这种情况下,您可以对数据进行子集化并生成单独的图。可以在scale_x_discrete命令中添加limitsbreaks,保留轴上的所有点。
  • 有没有办法用 dwplot 做到这一点?例如,您不能执行 dwplot(x) + dwplot(y) 并像使用 geom_point 那样将两个图一起显示

标签: r ggplot2


【解决方案1】:

这是一个解决方案,您可以迭代预测变量(使用 for 循环)并将它们传递给 dwplot
此解决方案首先在所有预测变量上拟合模型,然后仅传递其中的一个子集(以下预测变量只有 term 标识符,统计信息以 NA 传递)

library(dotwhisker)
# Final result
plots <- list()

# Create a model (using tidy to easily subset)
fit <- broom::tidy(lm(mpg ~ wt + gear + cyl, mtcars))

# Iterate through predictors (#1 is intercept)
for(i in 2:nrow(fit)) {
    # empty terms
    if (i < nrow(fit)) {
        # Add following predictors as NA
        terms <- data.frame(term = fit[(i + 1):nrow(fit), ]$term)
    } else {
        terms <- NULL
    }
    plots[[i - 1]] <- dwplot(dplyr::bind_rows(fit[1:i, ], terms)) + 
                          # Add fixed scales that all plots
                          coord_cartesian(xlim = c(-5.5, 1.5))
}

# Final result is stored in list plots
ggpubr::ggarrange(plotlist = plots)

【讨论】:

    猜你喜欢
    • 2013-12-21
    • 2019-09-12
    • 1970-01-01
    • 2015-06-13
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多