ggplot函数返回的plotly工具提示名称

4

我定义了一个函数,它接收一个数据框并返回一个绘图,之后我将其传递给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()

我知道我可以在函数内部为数据框创建一个文字列,然后调用 ggplotly(tooltip = "text")(我在 Stack Overflow 上阅读了很多相关问题),但我想知道是否有另一种方法可以通过修改函数或使用 ggplotly 中的某些特殊参数来获得正确的工具提示名称。
我的期望输出是:
  • 一个 Plotly 图形
  • 工具提示能够准确读取数值,并且名称为 "x" 和 "y"
1个回答

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)

enter image description here

注意:在plotTrend函数调用内部,其工作方式相同。

或者,使用整洁评估将列名称作为函数参数传递给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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接