使用子图时在ggplotly中控制图例

时间:2019-08-22 08:29:35

标签: r plotly ggplotly

我使用R plotly包以及函数ggplotlysubplot来创建一个由多个单独交互的ggplot2图组成的交互图。一些图共享相同的分组变量。

col <- factor(rep(c(1, 2), 5))
fill <- factor(c(rep("a", 5), rep("b", 5)))
x1 <- x2 <- y1 <- y2 <- 1:10
x3 <- y3 <- 11:20
d1 <- dplyr::tibble(x1 = x1, y1 = y1, col = col)
d2 <- dplyr::tibble(x2 = x2, y2 = y2, col = col, fill = fill)
d3 <- dplyr::tibble(x3 = x3, y3 = y3, col = col)

g1 <- 
  ggplot2::ggplot(d1) + 
  ggplot2::geom_point(ggplot2::aes(x = x1, y = y1, col = col))

g2 <- 
  ggplot2::ggplot(d2) + 
  ggplot2::geom_point(ggplot2::aes(x = x2, y = y2, col = col, fill = fill)) + 
  ggplot2::scale_fill_manual(values = c("red","green")) 

g3 <- 
  ggplot2::ggplot(d3) + 
  ggplot2::geom_point(ggplot2::aes(x = x3, y = y3, col = col))

plotly::subplot(plotly::ggplotly(g1), plotly::ggplotly(g2), plotly::ggplotly(g3))

enter image description here

1)如何删除交互式plotly图例中重复的“ col”标签?

2)如何删除“填充”的图例,而保留“ col”的图例?


编辑:我知道以下“肮脏”解决方案,该解决方案是手动禁用图例:

t <- 
plotly::subplot(plotly::ggplotly(g1), plotly::ggplotly(g2), plotly::ggplotly(g3))

t$x$data[[1]]$showlegend <- FALSE
t$x$data[[2]]$showlegend <- FALSE
t$x$data[[3]]$showlegend <- FALSE
t$x$data[[4]]$showlegend <- FALSE

但是,这要求我提前知道列表元素的位置,这就是为什么我要寻找更通用的解决方案。

1 个答案:

答案 0 :(得分:0)

另一种手动删除不需要的图例的方法是使用<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk"></script> <div id="map-canvas"></div> <div id="marker"> ID: 1 </div>。在您的示例中,style()(之前定义了lt <- t %>% style(t, showlegend = FALSE, traces = 3:n),将消除不需要的图例。