简体   繁体   中英

How do I create a legend for both color and shape with ggplotly

I have find on stackoverflow how to create a legend for both color and shape in ggplot2. This example works perfect :

state1 <- c(rep(c(rep("N", 7), rep("Y", 7)), 2))
year <- rep(c(2003:2009), 4)
group1 <- c(rep("C", 14), rep("E", 14))
group2 <- paste(state1, group1, sep = "")
beta <- c(0.16,0.15,0.08,0.08,0.18,0.48,0.14,0.19,0.00,0.00,0.04,0.08,0.27,0.03,0.11,0.12,0.09,0.09,0.10,0.19,0.16,0.00,0.11,0.07,0.08,0.09,0.19,0.10)
lcl <- c(0.13,0.12,0.05,0.05,0.12,0.35,0.06,0.13,0.00,0.00,0.01,0.04,0.20,0.00,0.09,0.09,0.06,0.06,0.07,0.15,0.11,0.00,0.07,0.03,0.05,0.06,0.15,0.06)
ucl <- c(0.20,0.20,0.13,0.14,0.27,0.61,0.28,0.27,0.00,1.00,0.16,0.16,0.36,0.82,0.14,0.15,0.13,0.13,0.15,0.23,0.21,0.00,0.15,0.14,0.12,0.12,0.23,0.16)
data <- data.frame(state1,year,group1,group2,beta,lcl,ucl)
pd <- position_dodge(.65)

essai <- ggplot(data = data,aes(x= year, y = beta, colour = group2,shape = group2)) + 
geom_point(position = pd, size = 4) +
geom_errorbar(aes(ymin = lcl, ymax = ucl), colour = "black", width = 0.5, position = pd) +
scale_colour_manual(name = "Treatment & State",
                  labels = c("Control, Non-F", "Control, Flwr", "Exclosure, Non-F", "Exclosure, Flwr"),
                  values = c("blue", "red", "blue", "red")) +   
scale_shape_manual(name = "Treatment & State",
                 labels = c("Control, Non-F", "Control, Flwr", "Exclosure, Non-F", "Exclosure, Flwr"),
                 values = c(19, 19, 17, 17))
essai

在此输入图像描述

But when I try make it ggplotly, legend is duplicated and labels are displayed...

library(ggplotly)
ggplotly(essai)

在此输入图像描述

Thank you for help

Have you considered using the plot_ly() function to accomplish this? If I've read this correctly, need one legend of both color and shape to work with an interactive plot. I've linked their reference/attribute page.

plottest <- plot_ly(data = data,x= year, y = beta,
type = "scatter", symbol = group2, 
symbols = c("circle", "square", "triangle-down","triangle-up"),mode = "markers", 
error_y = list(
      type = "data",
      symmetric = FALSE,
      array = c(ucl),
      arrayminus = c(lcl))
)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM