2017-07-24 66 views
5

Mam problem z umieszczeniem legendy o następującej ggplot owiniętej w ggplotly(), pokazując tylko jedną estetykę. Obecnie pokazuje trzy zmienne (shape, color, linetype) dla każdego wpisu legendy, ale chcę tylko pokazać jeden.dodatkowe zmienne w legendzie podczas pakowania ggplot2 w działki R

Tylko jedna z wartości aes() zmienia się na tym wykresie (linetype), ale pozostałe wartości odpowiadają konkretnym zmiennym i powinny być jednolite na wielu działkach na mojej stronie internetowej. Po prostu usunięcie pozostałych wartości aes() z wykresu nie jest dobrym rozwiązaniem w moim przypadku, ponieważ chcę je zmienić na innych działkach podobnych do tego. Ukrywanie legendy i modyfikowanie pliku tooltip powoduje wyświetlenie informacji, ale nie jest to pożądany efekt końcowy.

Podczas działania, następujący kod:

library(ggplot2) 
library(plotly) 

#aes lists 
solute_colors <- c("NO3" = "#BF1616") 
source_shapes <- c("rain"= 21) 
location_linetypes <- c("1"= 2,"2"= 1,"3"= 3) 

#create dataframe 
data <- data.frame(
    date = c(1966, 1970, 1972, 1979, 1989, 1990, 1998, 2000), 
    concentration = sample(1:8), 
    solute = c("NO3", "NO3", "NO3", "NO3", "NO3", "NO3", "NO3", "NO3"), 
    location = c("3", "1", "2", "3", "2", "1", "1", "2"), 
    source = c("rain", "rain", "rain", "rain", "rain", "rain", "rain", "rain") 
) 

#ggplot 
ggplot(data, aes(x= date, y= concentration, linetype= location, color= solute, shape= source))+ 
    geom_point() + 
    geom_line() + 
    scale_shape_manual(values = source_shapes) + 
    scale_color_manual(values = solute_colors)+ 
    guides(shape = F, color = F)+ #removes shape and source legends in ggplot, but not in ggplotly 
    scale_linetype_manual(values = location_linetypes) 

legenda wskazuje tylko linetype, który jest pożądany efekt (patrząc here). Jednakże, kiedy opakowanie to w ggplotly

#ggplot p 
p<-ggplot(data, aes(x= date, y= concentration, linetype= location, color= solute, shape= source))+ 
    geom_point() + 
    geom_line() + 
    scale_shape_manual(values = source_shapes) + 
    scale_color_manual(values = solute_colors)+ 
    guides(shape = F, color = F)+ #removes shape and source legends in ggplot, but not in ggplotly 
    scale_linetype_manual(values = location_linetypes) 
#wrap p in ggplotly 
ggplotly(p) 

legenda wskazuje się z trzech aes() wartości w ramach tej samej linii w legendzie widziany

here.

Jak zastąpić tę zmianę podczas pakowania w ggplotly lub ręcznie kodować w legendzie? Dodałem motywy w ggplot, które zmieniają legendę zarówno w ggplot jak i ggplotly po prostu dobrze (jak na przykład legend.position i legend.title), chociaż nie znalazłem niczego, aby kontrolować pokazywane rzeczywiste zmienne.

Używam wersji R 3.4.0 (RStudio wersja 1.0.143) na Windows 10. Każda pomoc byłaby bardzo ceniona!

Odpowiedz

2

Nie wiem, jak wymusić ggplotly przestrzeganie etykiet legendy, ale można ręcznie zastąpić praktycznie wszystko.

gp <- ggplotly(p) 
gp[['x']][['data']][[1]][['name']] <- '1' 
gp[['x']][['data']][[2]][['name']] <- '2' 
gp[['x']][['data']][[3]][['name']] <- '3' 
gp 

enter image description here