【问题标题】:How to construct hover text without disabling geom_smooth?如何在不禁用 geom_smooth 的情况下构建悬停文本?
【发布时间】:2018-06-24 17:49:14
【问题描述】:

代码

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)))

无法生成平滑线,尽管它在鼠标悬停时完成了预期。

这是一个错误吗?

有解决办法吗?

【问题讨论】:

    标签: r ggplot2 plotly ggplotly


    【解决方案1】:

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

    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) 
    

    【讨论】:

    • 不,我实际上想要一个包含县、州、变量值和值描述的复杂字符串。我想这就是我尝试为 stackoverflow 制作一个最小示例的结果。
    • @user3673 我修改了我的答案。请让我知道这是否适用于您处理的真正问题。
    • “警告:忽略未知参数:文本”没关系,我找到了解决方法。我会发布它。
    • 好的,忽略错误信息有效。我将删除我的工作并接受您的回答。请在末尾添加print 以完成代码。
    • @mihagazvoda 我已经编辑了答案,为 geom_smooth 添加了自定义工具提示
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    • 2017-07-15
    • 1970-01-01
    • 2014-09-09
    • 2013-09-09
    • 2018-12-08
    相关资源
    最近更新 更多