使用Plotly子图制作两个ggplot并带有共同的图例?

4

我正在尝试排列两个转换为plotly对象的ggplot对象,并使用一个共同的图例。但是图例出现了重复:

enter image description here

df1 <- read.table(text = "group   x     y   
              group1 -0.212201  0.358867
              group2 -0.279756 -0.126194
              group3  0.186860 -0.203273
              group4  0.417117 -0.002592
              group1 -0.212201  0.358867
              group2 -0.279756 -0.126194
              group3  0.186860 -0.203273
              group4  0.186860 -0.203273", header = TRUE)

df2 <- read.table(text = "group   x     y   
              group1  0.211826 -0.306214
              group2 -0.072626  0.104988
              group3 -0.072626  0.104988
              group4 -0.072626  0.104988
              group1  0.211826 -0.306214
              group2 -0.072626  0.104988
              group3 -0.072626  0.104988
              group4 -0.072626  0.104988", header = TRUE)
library(dplyr)
library(ggplot2)
library(plotly)

p1 <- ggplot(df1, aes(x = x, y = y, colour = group)) +     
  geom_point(position = position_jitter(w = 0.04, h = 0.02), size = 1.8)

p2 <- ggplot(df2, aes(x = x, y = y, colour = group)) + 
  geom_point(position = position_jitter(w = 0.04, h = 0.02), size = 1.8)

subplot(ggplotly(p1), ggplotly(p2), nrows = 1)

我尝试过

 subplot(ggplotly(p1), ggplotly(p2), nrows = 1) %>% layout(showlegend = FALSE)

但整个传说就此消失。
1个回答

6

我无法通过两个不同的图表来解决双重图例问题,但是您可以将这两个数据框合并以制作单个分面图。无论图例问题如何,使用具有分面的单个数据框似乎是更自然的方法,因为每个数据框中的分组变量相同。在下面的示例中,为了匹配您的示例,我已删除了分面条纹,但是您可以通过删除主题语句来保留它们。

p = ggplot(bind_rows(df1 %>% mutate(df="df1"), df2 %>% mutate(df="df2")),
       aes(x = x, y = y, colour = group)) +
  geom_point(position = position_jitter(w = 0.04, h = 0.02), size = 1.8) +
  facet_wrap(~ df, scales="free") +
  theme(strip.text=element_blank())

ggplotly(p)

enter image description here


谢谢你的回答。你知道如何在两个图中选择相同的区域吗?当一个区域被选中时。 - schlusie
您的意思是希望x和y轴的范围相同吗?如果是,有几个选项。(1)删除scales="free"。(2)用facet_grid(. ~ df) +替换facet_wrap(~ df, scales="free") +。(3)手动设置范围,例如scale_y_continuous(limits=c(-0.2,0.3)),x轴也是类似的设置。(4)使用coord_cartesian(xlim=c(-0.3, 0.4), ylim=c(-0.2, 0.4))手动设置范围。 - eipi10
谢谢。但是我想要的在plotly对象中:我可以通过绘制矩形或某个区域来放大,然后只有所选图的轴适应。但我希望两个轴都能适应。 - schlusie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接