R语言 如何使用ComplexUpset库为“交集大小”分配对数刻度?

ss2ws0br  于 2022-12-20  发布在  其他
关注(0)|答案(1)|浏览(135)

当我使用ComplexUpset库为“交叉点大小”指定一个对数刻度时,条形消失了。有什么办法吗?

vltsax25

vltsax251#

这是因为在ggplot 2中,当使用除"identity"以外的stat时,geom_bar无法很好地进行log 10缩放/转换(请参见Bar plot with log scales)。CompelxUpset单独绘制每个数据点,以便为每个观测单独着色。您可以通过将以下函数作为数据传递给geom_bar来恢复绘制预先汇总的数据:

presence = ComplexUpset:::get_mode_presence('exclusive_intersection')

summarise_values = function(df) {
    aggregate(
        as.formula(paste0(presence, '~ intersection')),
        df,
        FUN=sum
    )
}

然后绘制它,从下面的例子开始:

library(ComplexUpset)
library(ggplot2)
movies = as.data.frame(ggplot2movies::movies)
movies[movies$mpaa == '', 'mpaa'] = NA
movies = na.omit(movies)
genres = colnames(movies)[18:24]

仅获取log 10转换:

upset(
    movies,
    genres,
    base_annotations=list(
        'log10(intersection size)'=(
            ggplot()
            + geom_bar(data=summarise_values, stat='identity', aes(y=!!presence))
            + ylab('Intersection size')
            + scale_y_continuous(trans='log10')
        )
    ),
    min_size=5,
    width_ratio=0.1
)

也要在轴上获得log 10:

upset(
    movies,
    genres,
    base_annotations=list(
        'log10(intersection size)'=(
            ggplot()
            + geom_bar(
                data=summarise_values,
                stat='identity',
                aes(y=log10(!!presence))
            )
            + ylab('log10(intersection size)')
        )
    ),
    width_ratio=0.1
)

相关问题