ggplotly-仅在某些geom对象上返回工具提示悬停文本

时间:2018-06-23 20:50:38

标签: r ggplot2 ggplotly

我正在绘制条形图几何图形,在其上方分层放置一个点几何图形,如下所示:

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上时,都会弹出工具提示。如何使工具提示仅在条形图上重叠时才弹出?

2 个答案:

答案 0 :(得分:1)

我希望您同时想出了这一点,但我遇到了同样的问题,并认为我会帮助到此为止的任何人。

对我来说,关键是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)

不包括下面的样式功能,我一直在获取条形图和文本标签的悬浮信息,这看起来有些愚蠢。以下允许您选择具有跟踪信息(或根据文档的任何“可视属性”)的跟踪

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

现在,Plotly的文档在结构和全面性方面始终令人讨厌。找出哪些痕迹是经过反复试验的,但其中蕴含着乐趣。

答案 1 :(得分:1)

要扩展@MokeEire的答案,请使用style()函数并将其应用于特定的迹线即可。我绝对不知道如何确定哪些迹线编号了。

这是一种按顺序打印出轨迹的方法,描述了它们映射到的几何类型(需要listviewerjsonlite)。

使用Titanic数据设置一个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))

这将返回如下内容:

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

您知道条形图是第一和第二迹线,标签(“散布”)是3d。

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

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