дополнительные переменные в легенде при переносе ggplot2 в plotly R

У меня проблемы с тем, чтобы в легенде следующего ggplot, завернутого в ggplotly(), отображалась только одна эстетика. В настоящее время он показывает три переменные (shape, color, linetype) для каждой записи легенды, но я хочу показать только одну.

На этом графике изменяется только одно из aes() значений (linetype), но другие значения соответствуют определенным переменным и должны быть одинаковыми для многих графиков на моем веб-сайте. Простое удаление других aes() значений из графика не является жизнеспособным решением в моем случае, так как я хочу, чтобы они изменились на других графиках, подобных этому. Кроме того, скрытие легенды и изменение tooltip для отображения информации работает, но не является желаемым конечным результатом.

При запуске следующий код:

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)

легенда показывает только linetype, который является желаемым результатом (см. здесь). Однако, если обернуть его в 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)

легенда отображается с тремя aes() значениями в одной строке легенды, как видно

здесь.

Как мне отменить это изменение при переносе в ggplotly или вручную кодировать в легенде для него? Я добавил темы в ggplot, которые отлично меняют легенду как в ggplot, так и в ggplotly (например, legend.position и legend.title), хотя я не нашел ничего, что могло бы контролировать показанные фактические переменные.

Я использую R версии 3.4.0 (RStudio версии 1.0.143) в Windows 10. Любая помощь будет принята с благодарностью!


person Devri A    schedule 24.07.2017    source источник


Ответы (1)


Не знаю, как заставить ggplotly уважать метки легенды, но вы можете вручную перезаписать практически все.

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

введите описание изображения здесь

person Maximilian Peters    schedule 24.07.2017