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

标签 r ggplot2 plotly ggplotly

代码

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的美学规范中。它应该允许您自定义工具提示。尽管产生警告“警告:忽略未知的美学:文本”,但它会创建所需的工具提示。检查另一个example在plotly官方页面中,在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")

enter image description here

编辑:geom_smooth 的工具提示

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

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) 

enter image description here

关于r - 如何在不禁用 geom_smooth 的情况下构建悬停文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51012509/

相关文章:

r - 将outer()应用于两个列表

c++ - 如何在我的 TMB .cpp 文件中包含更多目标函数?

r - 对于大型查询,Fetch() 在 RSQLite 中挂起

r - 一个图中的两个 ggplots,靠得很近

r - 理解ggplot2 geom_map map_id

r - ggplot2 堆叠条形图顺序在更新后中断

python - 通过单击 plotly 中的数据点打开 url?

r - 如何从 rpart 包中绘制递归分区

r - 使用ggplotly时,将鼠标悬停在plotly中的标签上

python - 更改折线图中的色阶