Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Duplicate hover Info in plotly with ggplot2

Tags:

r

ggplot2

plotly

I have a code that uses the plotly and ggplot2. When I hover the info the information inside is duplicated meaning that it show 2 same TrendName Info lines for all of the graphs. for example this is what it is showing in the hover info

Month_Names: 2011-05 Actual_volume: 56488 TrendName: 2010-11 - 2017-01 TrendName: 2010-11 - 2017-01

How do I show only 1 TrendName? Thanks

Here is my code

library(ggplot2)
library(dplyr)
library(tidyr)
library(plotly)

Month_Names <- c("2010-11","2010-12",
             "2011-01","2011-02","2011-03","2011-04","2011-05","2011-06","2011-07","2011-08","2011-09","2011-10","2011-11","2011-12",
             "2012-01","2012-02","2012-03","2012-04","2012-05","2012-06","2012-07","2012-08","2012-09","2012-10","2012-11","2012-12",
             "2013-01","2013-02","2013-03","2013-04","2013-05","2013-06","2013-07","2013-08","2013-09","2013-10","2013-11","2013-12",
             "2014-01","2014-02","2014-03","2014-04","2014-05","2014-06","2014-07","2014-08","2014-09","2014-10","2014-11","2014-12",
             "2015-01","2015-02","2015-03","2015-04","2015-05","2015-06","2015-07","2015-08","2015-09","2015-10","2015-11","2015-12",
             "2016-01","2016-02","2016-03","2016-04","2016-05","2016-06","2016-07","2016-08","2016-09","2016-10","2016-11","2016-12",
             "2017-01")
Actual_volume <- c(54447,57156,
               52033,49547,58718,53109,56488,60095,54683,60863,56692,55283,55504,56633,
               53267,52587,54680,55569,60013,56985,59709,61281,54188,59832,56489,55819,
               59295,52692,56663,59698,61232,57694,63111,60473,58984,64050,54957,63238,
               59460,54430,58901,61088,60496,62984,66895,62720,65591,67815,58289,72002,
               61054,60329,69283,68002,63196,72267,71058,69539,71379,70925,68704,76956,
               65863,70494,77348,70214,74770,77480,69721,83034,76761,77927,79768,81836,
               75381)

df_data <- data.frame(Month_Names, Actual_volume) 

trendDateRange1 <- c("2010-11-01", "2017-01-31")
trendDateRange2 <- c("2012-01-01", "2012-12-31")
trendDateRange3 <- c("2013-01-01", "2013-12-31")
numoftrends <- 3

trends <- data_frame(Start = c("2010-11", "2012-01", "2013-01"),
                 End = c("2017-01", "2012-12", "2013-12"))
combined_data <- df_data %>%
                 crossing(trends) %>%
                 mutate(Month_Names = as.character(Month_Names),
TrendName = paste(Start, End, sep = "-")) %>%
            filter(Month_Names >= Start,
                  Month_Names <= End)

p <- ggplot(combined_data, aes(Month_Names, y = Actual_volume,
                           group = TrendName,
                           color = TrendName)) +
     geom_line() +
     labs(x=" ",y=" ") +
     labs(title = "New plot title") +
     theme(plot.title = element_text(family = "Arial", color="blue", 
                              size=18),
     legend.title = element_blank(),
     axis.text.x = element_text(angle = 45, hjust = 1)
     )

ggplotly(p) %>% 
     layout(title = "New plot title", 
            legend = list(orientation = "h",x = 0.25, y = -.75),  
            annotations = list()
           ) 
like image 634
aotearoa Avatar asked May 10 '17 17:05

aotearoa


1 Answers

You've 4 variables in the aes when you build your ggplot object. When you use ggplotly it will use all mapped aesthetics in the tooltip.

To remove the duplicate caused by group and color you need to specify what items to use in the tooltip as a character vector. (Note the spelling on colour, and you can also use group instead).

ggplotly(p, tooltip = c("x","y","colour")) %>% 
  layout(title = "New plot title", 
         legend = list(orientation = "h",x = 0.25, y = -.75)
  ) 
like image 55
Jake Kaupp Avatar answered Nov 11 '22 08:11

Jake Kaupp