簡體   English   中英

從ggplot函數返回的plotly工具提示名稱

[英]plotly tooltip names returned from ggplot function

我已經定義了一個函數,它接受一個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)
}

當然,我可以叫plotTrenda ,我會得到我期待的情節。

但是當我在其上調用ggplotly時,工具提示會讀取一個丑陋的get(var1)而不是列的名稱(在本例中為“x”)。

plotTrend(a)
ggplotly()

我知道我可以在函數內部為data.frame創建一個文本列,並調用ggplotly(tooltip = "text") (我在SO中看到了很多問題)但是我想知道是否還有另一種方法可以獲得工具提示中的正確名稱,可以通過修改函數或在ggplotly使用一些特殊參數來ggplotly

我的預期輸出是:

  • 情節劇情
  • 准確讀取值且名稱為“x”和“y”的工具提示

我們可以使用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函數調用中的工作方式相同。


或者,使用整潔的評估將列名作為函數參數傳遞給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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM