首页 > 解决方案 > ggplot2 3.2.0 版和bayesAB 绘图冲突

问题描述

bayesAB这是使用该包的两组之间的简单贝叶斯比较:

library(bayesAB)

A_binom <- rbinom(100, 1, .5)
B_binom <- rbinom(100, 1, .6)

AB1 <- bayesTest(A_binom, B_binom,
                 priors = c('alpha' = 1, 'beta' = 1),
                 distribution = 'bernoulli')
plot(AB1)

并使用ggplot2(3.1.1) 的先前版本,用于返回预期图的过程,如此处所述和所示:https ://frankportman.github.io/bayesAB/reference/bayesTest.html 。

但是,更新到ggplot2(3.2.0) 后,运行后出现以下错误plot(AB1)

错误:必须给出 ymin 或 ymax 作为美学。

在检查了更多使用p = plot(AB1)以分别关注每个情节之后,我看到了这一点p$posteriors并按 p$samples预期工作,问题与p$priors. 同一个包 ( ) 中的plotBeta(6,4),​​ 等命令也存在类似问题。plotGamma(1,1)bayesAB

有没有办法使用ggplot23.2.0 解决这个问题?

标签: rggplot2

解决方案


此错误是由于代码更改所致(请参阅3.2.0 的 CRAN 新闻文件geom_ribbon的“重大更改”部分)。

ggplot2 团队已经通过bayesAB 的 GH 问题页面提醒了包作者,因此希望该包可以很快更新以解决这个问题。

plotDist_在此之前,一种快速的解决方法是在未导出的函数中修改底层有问题的代码,方法是在trace(bayesAB:::plotDist_, edit=TRUE)R 会话开始时运行,并修改以下代码行。

原来的:

function (support, hseq, dist, params) 
{
    discretes <- c("Poisson")
    ribbon_or_bar <- ggplot2::geom_ribbon(ymin = 0, 
        ymax = hseq, # <- modify this line
        size = 2, color = I("lightblue"), fill = "lightgreen", 
        alpha = 0.25)
    # ... omitted
}

修改的:

function (support, hseq, dist, params) 
{
    discretes <- c("Poisson")
    ribbon_or_bar <- ggplot2::geom_ribbon(ymin = 0, 
        mapping = ggplot2::aes(ymax = hseq), # new version, with ymax placed inside aes()
        size = 2, color = I("lightblue"), fill = "lightgreen", 
        alpha = 0.25)
    # ... omitted
}

plot(AB1)更改后应该像以前一样工作。下面是对应的图p$priors

阴谋

plotBeta(6,4)

情节2

plotGamma(1,1)

情节3


推荐阅读