【问题标题】:plotly tooltip names returned from ggplot function从 ggplot 函数返回的绘图工具提示名称
【发布时间】:2019-08-09 22:14:57
【问题描述】:

我已经定义了一个函数,它接受一个 data.frame 并返回一个绘图,稍后我将其传递给 plotly。我需要这个函数是灵活的,它会被多次调用(这就是我写一个函数的原因)。一个简单的可重现示例:

a <- data.frame(x = 1:3, y = c(2, 6, 3))
library(ggplot2)
library(plotly)

plotTrend <- function(x){
   var1 <- names(x)[1]
   var2 <- names(x)[2]
   p <- ggplot(a, aes(x = get(var1), y = get(var2)))+
           geom_point()+
           geom_smooth(method = "lm")
   return(p)
}

当然,我可以在a 上致电plotTrend,我会得到我期待的情节。

但是当我在上面调用ggplotly 时,工具提示显示的是一个丑陋的get(var1),而不是列名(本例中为“x”)。

plotTrend(a)
ggplotly()

我知道我可以在函数内为 data.frame 创建一个文本列,然后调用 ggplotly(tooltip = "text")(我在 SO 中阅读了很多关于那个的问题),但我想知道是否有另一种方法来获得正确的工具提示中的名称,可以通过修改函数或使用ggplotly 中的一些特殊参数。

我的预期输出是:

  • 有情节的情节
  • 准确读取值且名称为“x”和“y”的工具提示

【问题讨论】:

    标签: r ggplot2 plotly


    【解决方案1】:

    我们可以使用aes_stringggplotly 工具提示中显示评估的列名:

    library(ggplot2)
    library(plotly)
    
    a <- data.frame(x = 1:3, y = c(2, 6, 3))
    
    var1 <- names(a)[1]
    var2 <- names(a)[2]
    
    p <- ggplot(a, aes_string(x = var1, y = var2)) +
        geom_point()+
        geom_smooth(method = "lm") 
    
    ggplotly(p)
    

    注意:这在 plotTrend 函数调用中的工作方式相同。


    或者,使用 tidy 评估将列名作为函数参数传递给 plotTrend 函数:

    plotTrend <- function(data, x, y) {
    
      x_var <- enquo(x)
      y_var <- enquo(y)
    
      p <- ggplot(data, aes(x = !!x_var, y = !!y_var)) +
          geom_point()+
          geom_smooth(method = "lm") 
    
      return(p)
    
    }
    
    plotTrend(a, x = x, y = y) %>%
        ggplotly()
    

    【讨论】:

      猜你喜欢
      • 2021-12-13
      • 2020-06-03
      • 1970-01-01
      • 2011-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-02
      • 1970-01-01
      相关资源
      最近更新 更多