2016-11-02 1 views
2

Я пытаюсь организовать два объекта ggplot, преобразованных в объект plotly, и использовать одну общую легенду. Но легенда как-то в два раза:Плоский подзаговор с двумя ggplots и общей легендой?

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) 

но вся легенда просто исчезает

ответ

5

я не смог исправить двойную легенду с двумя отдельные сюжеты, но вы можете объединить два кадра данных, чтобы сделать один граненный сюжет. Независимо от проблемы с легендой, использование одного кадра данных с огранкой кажется более естественным, учитывая, что переменная группировки одинакова в каждом кадре данных. В приведенном ниже примере я удалил полосы фасета, чтобы соответствовать вашему примеру, но вы можете сохранить их, удалив оператор theme.

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

+0

спасибо за ответ. Вы знаете, как выбрать один и тот же регион на обоих участках, когда выбран регион? – schlusie

+0

Вы хотите сказать, что вы хотите, чтобы диапазоны осей x и y были одинаковыми? Если да, есть несколько вариантов. (1) удалить 'scales =" free "'. (2) Заменить 'facet_wrap (~ df, scale =" free ") +' с 'facet_grid (. ~ Df) +'. (3) Установите диапазоны вручную, например, «scale_y_continuous (пределы = c (-0.2,0.3))» и аналогично для оси x. (4) Задайте диапазоны вручную с помощью 'coord_cartesian (xlim = c (-0.3, 0.4), ylim = c (-0.2, 0.4))'. – eipi10

+0

Спасибо. Но то, что я хотел, находится в объекте plotly: я могу увеличить масштаб, рисуя прямоугольник или определенный регион. Затем адаптируется только ось на выбранном участке. Но я хочу, чтобы обе оси адаптировались. – schlusie

Смежные вопросы