Home > other >  Hide specific variable from the hover text of plotly chart with two traces
Hide specific variable from the hover text of plotly chart with two traces

Time:03-03

I have the dataframe below and create a plotly plot object with inner circles. My issue is that I want to skip the value from both the gray and the green dots.

i <- 1

f<-bt %>% filter(issue==unique(bt$issue)[1]) %>%
ggplot(aes(x=year2)) 
  
  geom_point(aes(y=value,size=value),color="gray") 
  geom_point(aes(y=value,size=percent),color="darkolivegreen") 
  scale_x_continuous(n.breaks=14) 
  theme(legend.position = 'none',
        axis.title.y = element_blank(),
        axis.text.y = element_blank()) 
  labs(x="")

p2<-ggplotly(f)

p2$x$data[[1]]$text <- str_replace_all(p2$x$data[[1]]$text, 
                                       "year2", "Year") %>% 
  str_replace_all(., fixed("percent"),
                  "Percentage of all signed PTAs covering NTIs")

p2$x$data[[2]]$text <- str_replace_all(p2$x$data[[2]]$text, 
                                       "year2", "Year") %>% 
  str_replace_all(., fixed("percent"),
                  "Percentage of all signed PTAs covering NTIs")

p2

My data:

bt<-structure(list(year2 = c(1950, 1950, 1950, 1950, 1950, 1950, 
    1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 
    1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 
    1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 
    1950, 1950, 1950, 1950, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 
    1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 
    1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955), issue = c("air", 
    "anti_corruption", "anti_drug", "anti_terror", "biodiversity", 
    "chemical", "child", "contaminant", "cpr", "csr", "democracy", 
    "development", "eductation", "environmental_goods_services", 
    "ep", "esr", "fish_stock", "food_security", "forest", "gender", 
    "good_governance", "health", "human_trafficking", "labor_at", 
    "labor_at_child", "labor_at_equal_opportunity", "labor_at_forced", 
    "labor_at_health_and_safety", "labor_at_minimum_wage", "labor_at_unionize", 
    "labor_at_working_time", "labor_to", "migrantworker", "mineral", 
    "minority", "national_security", "region", "religion", "renewable_energy", 
    "rule_of_law", "social", "waste", "water", "air", "air", "anti_corruption", 
    "anti_corruption", "anti_drug", "anti_drug", "anti_terror", "anti_terror", 
    "biodiversity", "biodiversity", "chemical", "chemical", "child", 
    "child", "contaminant", "contaminant", "cpr", "cpr", "csr", "csr", 
    "democracy", "democracy", "development", "development", "eductation", 
    "eductation", "environmental_goods_services"), value = c(NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 8, NA, NA, 8, NA, NA, 
    NA, NA, NA, NA, 8, NA, NA, NA, NA, NA, NA, NA, NA, NA, 8, NA, 
    NA, NA, 16, NA, NA, NA, NA, 8, NA, NA, NA, NA, 12, 1, NA, NA, 
    12, 1, NA, NA, NA, NA, NA, NA, NA, NA, 24, 2, NA, NA, 12, 1, 
    36, 3, NA, NA, NA), percent = c(NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, 0.125, NA, NA, 0.125, NA, NA, NA, NA, NA, NA, 0.125, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.125, NA, NA, NA, 0.0625, 
    NA, NA, NA, NA, 0.125, NA, NA, NA, NA, 0.0833333333333333, 2, 
    NA, NA, 0.0833333333333333, 2, NA, NA, NA, NA, NA, NA, NA, NA, 
    0.0416666666666667, 1, NA, NA, 0.0833333333333333, 2, 0.0277777777777778, 
    0.666666666666667, NA, NA, NA)), row.names = c(NA, -70L), class = c("tbl_df", 
    "tbl", "data.frame"))

CodePudding user response:

I removed the filter so that points plotted. If you want the same tooltip in all points, you can add the text to ggplot(aes()). If you still wanted percent in the darkolivegreen points, you will need to add the text to the layers.

Just years, with text in ggplot():

f <- bt %>% # filter(issue == unique(bt$issue)[1]) %>%
  ggplot(aes(x = year2, text = paste0("Year: ", year2)))  
  geom_point(aes(y = value, size = value), color = "gray")  
  geom_point(aes(y = value, size = percent), color = "darkolivegreen")  
  scale_x_continuous(n.breaks = 14)  
  theme(legend.position  =  'none',
        axis.title.y = element_blank(),
        axis.text.y = element_blank())  
  labs(x = "")

ggplotly(f, tooltip = "text")

If you want the values from percent on the appropriate points, use this option. By the way, I've formatted the percent data as percentages. I provided two different ways of doing this. One of the methods is commented out. The one that is not commented out uses the scale package. Both work; it's up to you, of course.

f <- bt %>% # filter(issue == unique(bt$issue)[1]) %>%
  ggplot(aes(x = year2))  
  geom_point(aes(y = value, size = value, text = paste0("Year: ", year2)),
             color = "gray")  
  geom_point(aes(y = value, size = percent,
                 # text = paste0("Year: ", year2, "\nPercent: ", round(percent, 3) * 100, "%")), 
                 text = paste0("Year: ", year2, "\nPercent: ", scales::percent(percent))), 
             color = "darkolivegreen")  
  scale_x_continuous(n.breaks = 14)  
  theme(legend.position  =  'none',
        axis.title.y = element_blank(),
        axis.text.y = element_blank())  
  labs(x = "")

ggplotly(f, tooltip = "text")

enter image description here enter image description here

  • Related