如何在不禁用 geom_smooth 的情况下构建悬停文本?

How to construct hover text without disabling geom_smooth?

代码

library(ggplot2)
library(plotly)

df<-data.frame(replicate(2,sample(2000,size=29,replace=TRUE)))
p <- ggplot(df, aes(x=X1, y=X2*1000,text=X1))+geom_point()+geom_smooth()
p <- ggplotly(p, tooltip="text")
print(p)

生成具有平滑线的预期图以及鼠标悬停在其上显示 X1 值的点。

但是,将 ggplot 调用替换为:

ggplot(df, aes(x=X1, y=X2*1000,text=paste0("X1=",X1)))

无法生成平滑线,尽管它在鼠标悬停时达到预期效果。

这是一个错误吗?

有解决办法吗?

尝试将美学 text 放入 geom_point 的美学规范中。它应该让你自定义你的工具提示。尽管产生警告“警告:忽略未知美学:文本”,它仍会创建所需的工具提示。在plotly官方页面查看另一个example,在geom_point的美学中使用text

df<-data.frame(replicate(2, sample(2000, size = 29, replace = TRUE)))
p <- ggplot(df, aes(x = X1, y = X2 * 1000)) +  
  geom_point(aes(text = paste0("X1=", X1, " X2=", X2, " Whatever needed"))) +
  geom_smooth() 
ggplotly(p, tooltip = "text")

编辑:geom_smooth

的工具提示 如果我们想显示 geom_smooth 的工具提示,我们需要一种不同的方法。我们需要 style() 函数来修改 plotly 对象中的跟踪属性值。

set.seed(1)
df <- data.frame(replicate(2, sample(2000, size = 29, replace = TRUE)))
p <- ggplot(df, aes(x = X1, y = X2 * 1000))
w <-  ggplotly(p + geom_point() + geom_smooth())

text_1 <-  paste0("Text geom_point:", "<br />", "X1=", w$x$data[[1]]$x, "<br />", "X2=", w$x$data[[1]]$y)
text_2 <-  paste0("Text geom_smooth:", "<br />" , w$x$data[[2]]$text)
w %>% 
    style(text= text_1, traces = 1) %>% 
     style(text = text_2, traces = 2)