2016-12-04 3 views
0

У меня есть много отдельных объектов ggplotly, некоторые из них с легендами и некоторые без.Как изменить легенды нескольких графиков Графики в R

Я хочу, чтобы создать единое представление общей оси X для этих ggplotly объектов. (Я использую сюжетный() из plotly для этого)

с подзаговорами подхода, который я хочу, чтобы достичь следующего

  1. Не группируйте все легенды в одну легенду.

  2. Не добавляйте легенды, когда у отдельного объекта ggplotly его нет.

Пример кода

df <- structure(list(Tool = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 
             3L), .Label = c("ToolA", "ToolB", "ToolC"), class = "factor"), 
        StartTime = structure(c(1456383600, 1464291720, 1456383600, 
              1460710380, 1464291780, 1456383600, 1456383600, 1460710380 
        ), class = c("POSIXct", "POSIXt"), tzone = "MET"), Category = structure(c(1L, 
                           2L, 3L, 1L, 2L, 3L, 4L, 4L), .Label = c("C1", "C2", "C3", 
                                     "null"), class = "factor"), Type = structure(c(4L, 2L, 2L, 
                                                 3L, 3L, 2L, 1L, 1L), .Label = c("null", "T1", "T2", "T3"), class = "factor")), .Names = c("Tool", 
                                                                       "StartTime", "Category", "Type"), row.names = c(NA, -8L), class = "data.frame") 

данных

> df 
    Tool   StartTime Category Type 
1 ToolA 2016-02-25 08:00:00  C1 T3 
2 ToolA 2016-05-26 21:42:00  C2 T1 
3 ToolA 2016-02-25 08:00:00  C3 T1 
4 ToolB 2016-04-15 10:53:00  C1 T2 
5 ToolB 2016-05-26 21:43:00  C2 T2 
6 ToolB 2016-02-25 08:00:00  C3 T1 
7 ToolC 2016-02-25 08:00:00  null null 
8 ToolC 2016-04-15 10:53:00  null null 

Plotly

pOne <- ggplotly(ggplot(data=df[df$Tool=="ToolA",],aes(x=StartTime ,y= Tool, colour=Type))+ 
        geom_point(alpha=0.8,size=4)) %>% layout(legend = list(orientation = 'h')) 

pTwo <- ggplotly(ggplot(data=df[df$Tool=="ToolB",],aes(x=StartTime ,y= Tool,colour=Category))+ 
        geom_point(alpha=0.8,size=4)) %>% layout(legend = list(orientation = 'h')) 

pThree <- ggplotly(ggplot(data=df[df$Tool=="ToolC",],aes(x=StartTime ,y= Tool))+ 
        geom_point(alpha=0.8,size=4)) %>% layout(showlegend = FALSE) 

subplot(pOne,pTwo,pThree, nrows=3, shareX= T,which_layout = 1) 

Фактическое поведение

Мелированные легенды в красном enter image description here

Ожидаемое поведение enter image description here

Как я могу получить ожидаемое поведение? Пожалуйста помоги.

+0

может быть невозможен https://community.plot.ly/t/plotly-subplots-with-individual-legends/1754 – MLavoie

+0

@MLavoie да, вы правы. Я поднял вопрос в github. Я действительно хочу, чтобы они добавили эту функцию, иначе большие сюжеты станут очень неинтуитивными – pauljeba

ответ

0

[Отвечая на мой собственный вопрос, так как это направление я взял]

Вместо использованием plotly-х функций сюжетных, я нашел shiny dashboard быть лучшим решением. Он может непосредственно принимать несколько графиков не только из сюжетных, но и из объектов ggplot.

Единственным недостатком является то, что мы не можем сделать участки общей осью в блестящей приборной панели. Кроме того, я обнаружил, что shinyDashboard также помогает лучше структурировать интерфейс блестящего приложения.

Я искал около flexDashboard, но не нашел его достаточно интерактивным, как блестящую приборную панель для моих нужд.