垂直组合多个条形图

时间:2019-04-11 05:57:25

标签: r bar-chart plotly subplot

我正试图垂直组合条形图,共享其x轴。

我曾考虑为此使用R的{​​{1}}的{​​{1}},但是遇到了一个问题,希望这里有人可以解决。

以下是示例数据,该数据具有28个组,其中我在每个组中创建了4个系列的条形图,然后尝试使用plotly垂直组合它们:

subplot

创建条形图列表:

plotly::subplot

如果我尝试:

set.seed(1)
df <- data.frame(group = paste0("G",unlist(lapply(1:28,function(i) rep(i,4)))),
                 family = paste0("F",rep(1:4,28)),
                 log2n = log2(as.integer(runif(4*28,0,30))+1),
                 stringsAsFactors = F)

我得到: enter image description here

所以似乎有点溢出。

我逐渐减少了运行library(plotly) library(dplyr) groups <- unique(df$group) y.range <- c(0,max(df$log2n)) plot.list <- lapply(1:length(groups),function(g){ group.df <- dplyr::filter(df,group == groups[g]) plot_ly(x=group.df$family,y=group.df$log2n,type='bar',name=group.df$family,color=group.df$family,showlegend=(g==length(groups))) %>% layout(yaxis=list(range=y.range)) }) 的{​​{1}}中的地块数量,当达到19时,它似乎停止了“溢出”:

plotly::subplot(plot.list,shareX=T,nrows=length(plot.list))

enter image description here

是否知道是否希望获得全部28个条形图而不会溢出?

非常感谢

1 个答案:

答案 0 :(得分:1)

我将使用ggplot生成图形,然后使用适当大小的参数将其转换为plotly(或将其保存为图片文件)。

library(plotly)
library(tidyverse)

g <- ggplot(df, 
       aes(x = family, y = log2n, fill = family)) +
    geom_bar(stat = 'identity') +
    facet_wrap(~group, ncol = 1) +  
    theme_minimal() + 
    theme(legend.position = "none") 

ggsave(g, file = "temp.png", width = 4, height = 40)
ggplotly(g, width = 400, height = 4000)