使用两条轨迹从绘图图表的悬停文本中隐藏特定变量

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

我有下面的数据框,并创建了一个 plotly 带有内圆的绘图对象。我的问题是我想跳过灰色和绿色圆点中的 value

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

我的数据:

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"))

我删除了过滤器以便绘制点。如果你想要在所有点上使用相同的工具提示,你可以将 text 添加到 ggplot(aes())。如果您仍然想要 darkolivegreen 点中的 percent,则需要将 text 添加到图层中。

短短几年,文字在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")

如果您想要来自 percent 的值在适当的点上,请使用此选项。顺便说一句,我已将 percent 数据格式化为百分比。我提供了两种不同的方法来做到这一点。其中一种方法被注释掉了。没有被注释掉的使用scale包。两者都有效;当然,这取决于你。

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")