繁体   English   中英

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

[英]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类型(需要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"

而且您知道您的条形图是第 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM