ggplotly - 只有 return 某些几何对象上的工具提示悬停文本

ggplotly - only return tooltip hover text on certain geom objects

我正在绘制一个条形图 geom,上面有一个点 geom,如下所示:

plot_1 <- ggplot(results, aes(x=date, y = data, question_text=question_text,
                    val1 = val1)) + 
  geom_bar(stat = "identity", position = "dodge", aes(fill = Party)) +
  geom_point(data=results, aes(x=date, y=math*.01), colour="blue", group = 1) 

然后我调用 ggplotly 命令并像这样覆盖工具提示

ggplotly(plot_1, tooltip=c("question_text", "val1"))

但是,这使得每当我将鼠标放在 geom_point 或 geom_bar 上时,工具提示就会弹出。如何使工具提示仅在条形图重叠时弹出?

好吧,我希望你能同时解决这个问题,但我 运行 遇到了同样的问题,我想我会帮助其他遇到这里问题的人。

对我来说关键是 style() 功能。对于上下文,这是我试图制作的情节的简化版本:

p = ggplot(df, aes(x = category, y = total, group = group_level))+
    geom_bar(stat = "identity", position = position_dodge(width = .75))+ # Should probably just be using geom_col here
    geom_text(label = state)

如果不包括下面的样式功能,我会得到条形图和文本标签的悬停信息,这看起来有点傻。以下内容允许您选择哪些跟踪具有悬停信息(或根据文档的任何 "visual property")

ggplotly(p, tooltip = c("text")) %>%
    style(hoverinfo = "none", traces = c(3, 4))

现在,Plotly 的文档在结构和全面性方面一直很糟糕。找出哪些痕迹是一个试错过程,但乐趣就在于此。

为了扩展@MokeEire 的答案,使用 style() 函数并将其应用于特定的轨迹就可以了。不过,我完全不知道如何确定哪些痕迹被编号了。

这是一种按顺序打印痕迹的方法,描述它们映射到哪种几何体(需要 listviewerjsonlite)。

设置带有泰坦尼克号数据的 ggplotly 对象:

data(Titanic)
t <- data.frame(Titanic) %>%
  group_by(Class, Sex) %>%
  summarize(Freq = sum(Freq))

plot1 <- ggplot(t, aes(x=Class, y = Freq)) + 
  geom_bar(stat = "identity", position = "dodge", aes(fill = Sex)) +
  geom_text(aes(label=Freq, group=Sex), 
            position = position_dodge(width = 1))

p <- ggplotly(plot1)

正在打印痕迹:

p_json <- plotly_json(p)

print(paste0(fromJSON(p_json$x$data)$data$type, ": ", 
             fromJSON(p_json$x$data)$data$name))

这 returns 类似于:

"bar: Male"   "bar: Female" "scatter: NA"

你知道你的条形图是第一条和第二条轨迹,标签 ("scatter") 是 3d。

所以要删除标签的工具提示(不要像我一样浪费一个小时忘记 R 是 1 索引):

ggplotly(p, tooltip = c("text")) %>%
    style(hoverinfo = "none", traces = 3)