[英]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)
}
當然,我可以叫plotTrend
上a
,我會得到我期待的情節。
但是當我在其上調用ggplotly
時,工具提示會讀取一個丑陋的get(var1)
而不是列的名稱(在本例中為“x”)。
plotTrend(a)
ggplotly()
我知道我可以在函數內部為data.frame創建一個文本列,並調用ggplotly(tooltip = "text")
(我在SO中看到了很多問題)但是我想知道是否還有另一種方法可以獲得工具提示中的正確名稱,可以通過修改函數或在ggplotly
使用一些特殊參數來ggplotly
。
我的預期輸出是:
我們可以使用aes_string
在ggplotly
工具提示中顯示已評估的列名:
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.