当我使用ComplexUpset库为“交叉点大小”指定一个对数刻度时,条形消失了。有什么办法吗?
vltsax251#
这是因为在ggplot 2中,当使用除"identity"以外的stat时,geom_bar无法很好地进行log 10缩放/转换(请参见Bar plot with log scales)。CompelxUpset单独绘制每个数据点,以便为每个观测单独着色。您可以通过将以下函数作为数据传递给geom_bar来恢复绘制预先汇总的数据:
"identity"
geom_bar
CompelxUpset
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 )
1条答案
按热度按时间vltsax251#
这是因为在ggplot 2中,当使用除
"identity"
以外的stat时,geom_bar
无法很好地进行log 10缩放/转换(请参见Bar plot with log scales)。CompelxUpset
单独绘制每个数据点,以便为每个观测单独着色。您可以通过将以下函数作为数据传递给geom_bar
来恢复绘制预先汇总的数据:然后绘制它,从下面的例子开始:
仅获取log 10转换:
也要在轴上获得log 10: