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()
函数并将其应用于特定的轨迹就可以了。不过,我完全不知道如何确定哪些痕迹被编号了。
这是一种按顺序打印痕迹的方法,描述它们映射到哪种几何体(需要 listviewer
和 jsonlite
)。
设置带有泰坦尼克号数据的 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)
我正在绘制一个条形图 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()
函数并将其应用于特定的轨迹就可以了。不过,我完全不知道如何确定哪些痕迹被编号了。
这是一种按顺序打印痕迹的方法,描述它们映射到哪种几何体(需要 listviewer
和 jsonlite
)。
设置带有泰坦尼克号数据的 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)