[英]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)
不包括下面的样式函数,我得到了看起来有点傻的条形和文本标签的悬停信息。 以下允许您选择哪些跟踪具有悬停信息(或根据文档的任何“视觉属性”)
ggplotly(p, tooltip = c("text")) %>%
style(hoverinfo = "none", traces = c(3, 4))
现在 Plotly 的文档在结构和全面性上都非常糟糕。 找出哪些痕迹是一些尝试和错误,但乐趣就在于此。
为了扩展@MokeEire 的答案,使用style()
函数并将其应用于特定的跟踪就可以了。 不过,我完全不知道如何确定哪些痕迹被编号。
这是一种按顺序打印跟踪的方法,描述它们映射到的jsonlite
类型(需要listviewer
和jsonlite
)。
使用 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"
而且您知道您的条形图是第 1 条和第 2 条轨迹,标签(“散点图”)是 3d。
所以要删除标签的工具提示(不要浪费一个小时忘记 R 像我一样是 1 索引的):
ggplotly(p, tooltip = c("text")) %>%
style(hoverinfo = "none", traces = 3)
我无法使用这种方法来指定轨迹并使用geom_smooth
图控制悬停显示。 我希望这里有人能找出问题所在。
目标:在工具提示中仅显示y
值以获得更平滑的线条(均值和 se)
问题:更平滑的平均值的轨迹似乎是 4,对于更平滑的 se 线似乎是 5。但是将hoverinfo
更改为 4 没有任何作用,并且将hoverinfo
更改为 5 会更改更平滑平均值的工具提示,但不是更流畅
下面是Reprex,后面是问题截图
library(ggplot2)
library(plotly)
library(listviewer)
y <- c(2,7,3,4,2,4,5,5,1,4,4,7,4,2,2,3,7,4,1,3,6,11,3,4,3,3,3,2,0,2,1,0,3,1,1,2)
x <- c(lubridate::ymd("2018-12-01"),
lubridate::ymd(paste0("2019-", seq(1, 12, 1), "-01")),
lubridate::ymd(paste0("2020-", seq(1, 12, 1), "-01")),
lubridate::ymd(paste0("2021-", seq(1, 11, 1), "-01")))
df <- tibble(date=x, count=y) %>%
mutate(year = lubridate::year(date),
month.abb = month.abb[lubridate::month(date)])
p <- ggplot(df, aes(x = date, y = count)) +
geom_point(size=1.5, shape=21, stroke=0.25,
aes(fill = factor(year),
text = paste0(month.abb, ": ", count))) +
geom_smooth(span=.8, col="grey")
plotly_json(ggplotly(p)) # to identify the traces
# only demonstrating the effect of changing trace 5
ggplotly(p, tooltip = "text") %>%
style(hoverinfo = "y", traces = 5)
截图
显示更平滑的平均值似乎是轨迹 4,但更改轨迹 5 hoverinfo 控制显示,将其设置为仅显示“y”
显示更平滑的 se 似乎是 trace 5,但更改 trace 5 hoverinfo 对显示没有影响
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.