带有共享图例的多个绘图的小块图

时间:2017-02-25 08:39:37

标签: r ggplot2 plotly

我有一个ggplot个对象列表:

set.seed(1)
require(ggplot2)
pl <- lapply(1:3, function(.x) ggplot(data.frame(x=rnorm(100),y=rnorm(100),group=c(rep("a",50),rep("b",50))),aes(x=x,y=y,col=group))+geom_point())

我要转换为plotly个对象的列表并使用保存到html htmlwidgets::saveWidget

我想subplot就是这样的方式,就像这样:

require(plotly)
htmlwidgets::saveWidget(subplot(lapply(pl,function(p) ggplotly(p))),"~/pl.html")

然而,印刷的所有传说都出现了:

enter image description here

有没有办法用共享图例打印?

2 个答案:

答案 0 :(得分:1)

您可以手动覆盖$('#myForm').ajaxForm(function(response){ //Print response $('#ResultDiv').html(response); }); 属性。 histogram = zeros(1,256); skipcount = 0; for i = 1:size(image,1) for j = 1:size(image,2) skipcount = skipcount + 1; if (skipcount > 40) histogram(1,image(i,j)+1) = histogram(1,image(i,j)+1) + 1; end end end 创建三个图表,每个图表两个跟踪。第一个索引(showlegend)是图表,第二个索引是跟踪(ggplotly)。

或者更优雅的是,重新设置前4条痕迹:

p[[1]]

enter image description here

[['data']][[1]]

答案 1 :(得分:1)

借助@Maximilian Peters的帮助:

require(ggplot2)
require(plotly)
set.seed(1)

pl <- lapply(1:3, function(.x) ggplot(data.frame(x=rnorm(100),y=rnorm(100),group=c(rep("a",50),rep("b",50))),aes(x=x,y=y,col=group))+geom_point())

pll <- lapply(1:length(pl),function(p) {
  ply <- ggplotly(pl[[p]])
  if(p < length(pl)){
    ply[['x']][['data']][[1]][['showlegend']] <- FALSE
    ply[['x']][['data']][[2]][['showlegend']] <- FALSE
    ply <- hide_legend(ply)
  }
  return(ply)
})

htmlwidgets::saveWidget(subplot(pll),"ply.html")

enter image description here