2016-03-31 26 views
15

我有一個簡單的數據幀:如何使用ggplotly選擇變量在工具提示中顯示?

seq <- 1:10 
name <- c(paste0("company",1:10)) 
value <- c(250,125,50,40,40,30,20,20,10,10) 
d <- data.frame(seq,name,value) 

,我想這種方式繪製它:

require(ggplot2) 
ggplot(data = d,aes(x=seq,y=value))+geom_line() + geom_point() 

現在我想用PLOTY,主要是爲了能夠,將鼠標放在一個點的時候,獲取除價值之外的其他信息,例如公司名稱。我試試這個:

require(plotly) 
ggplotly() 

它給我一個工具提示,但只有seq和值。我嘗試了tooltip =的選項,但是它指定你只能在審美中使用變量describe,並且我不會在我的aes中使用名稱。

任何解決方案?我看到我不是第一個有這個問題的人,但是我還沒有找到與ggplotly一起工作的答案。

回答

24

根據@ royr2的建議,不需要修改plotly對象。只需添加label = name作爲第三審美

ggplot(data = d, aes(x = seq, y = value, label = name)) + geom_line() + geom_point() 

和工具提示會顯示除了nameseqvalue

ggplotly幫助文件說,大約tooltip參數:

The default, "all", means show all the aesthetic mappings (including the unofficial "text" aesthetic).

所以,你可以使用label審美只要你不想使用它geom_text

BTW:我也試過text代替label

ggplot(data = d, aes(x = seq, y = value, text = name)) + geom_line() + geom_point() 

但隨後ggplot2抱怨

geom_path: Each group consists of only one observation. Do you need to adjust the group aesthetic?

,只繪製點。我不得不添加一個虛擬組geom_line刪除的問題:(但請注意,如果你把虛擬組作爲第四審美內aes()默認情況下將同時在提示出現)

ggplot(data = d, aes(x = seq, y = value, text = name)) + geom_line(group = 1) + geom_point() 

但是,如果您想使用由geom_text繪製並顯示在工具提示中的不同字符串,我發現非官方的text美學可以與label一起使用。

編輯在評論回答一個問題:tooltip參數ggplotly()可以用來控制外觀。 ggplotly(tooltip = NULL)根本不會壓制工具提示。 ggplotly(tooltip = c("label"))選擇美學包含在工具提示中。

+0

謝謝,這對我來說似乎是一種獲得我想要的更可讀的方式。如果有人想使用geom_text,那麼aes應該直接放在geom_line和geom_text中。 – Malta

+0

除了添加其他標籤之外,是否還可以刪除默認標籤? –

+0

@VisionIncision是的。我相應地更新了我的答案。 – Uwe

9

您必須修改plotly object才能這樣做。或者使用plot_ly()來創建圖形...

編輯: 隨着plotly 4.0的發佈,語法將會改變一點點。

seq <- 1:10 
name <- c(paste0("company",1:10)) 
value <- c(250,125,50,40,40,30,20,20,10,10) 
d <- data.frame(seq,name,value) 

require(plotly) 
gg <- ggplot(data = d,aes(x=seq,y=value))+geom_line() + geom_point() 

gg <- plotly_build(gg) 

#OLD: 
gg$data[[1]]$text <- paste("Seq:", d$seq, "<br>", 
          "Value:", d$value, "<br>", 
          "Company:", d$name) 

#UPDATED: 
#Plotly_build creates two separate traces: 
#One with mode = markers and the other with mode = lines 
#Hence modify text for the second trace 

gg$x$data[[2]]$text <- paste("Seq:", d$seq, "<br>", 
          "Value:", d$value, "<br>", 
          "Company:", d$name) 

gg 
+0

很好,它的作品謝謝你!我也會給plot_ly()看一看,我想這可以提供更多可讀代碼,但這樣我就不會更新我所有的代碼! – Malta

+0

該解決方案適用於本地,但當我將應用放在閃亮的服務器上時,附加的工具提示不存在。然後我嘗試了下面的解決方案,並且工作。 – Joy

+0

這不再有效! –

19

建立在@ UweBlock的答案上,您還可以創建虛擬美學,以便在工具提示中顯示多個標籤。我無法找到這是記錄在案的地方,但發現它是一個非常具體的問題。虛擬變量按照您指定的順序顯示,但優先考慮默認變量(例如x和y)。爲了解決這個問題,你可以指定一個獨立的審美這些變量,如下圖所示:

library(plotly) 
p = ggplot(iris, aes(label=Species, label2=Petal.Length, label3=Petal.Width)) + 
    geom_point(aes(Sepal.Length,Sepal.Width)) 
ggplotly(p) 

enter image description here

+0

這確實有效。我有一個快速問題,有沒有什麼方法可以訂購工具提示?我的意思是x和y軸將是第一個,然後是其他標籤? – Joy

+0

@Joy它似乎首先要放置x和y,除非將它們移動到geom_point的aes:'p = ggplot(iris,aes(label = Species,label2 = Petal.Length,label3 = Petal。寬度))+ geom_point(aes(Sepal.Length,Sepal.Width))'。結果圖將按照它們在命令中出現的順序顯示工具提示。 – Teajay

+0

感謝您的回覆,但我收到錯誤:參數3不是矢量。任何想法? – Joy

9

非官方text審美允許引入所有你想要的(這裏我用name兩次變量顯示它):

require(ggplot2) 
ggplot(data = d,aes(x = seq, 
        y = value, 
        group = 1, 
        text = paste('name: ', name, 
           '</br>name_again: ', name) 
        ))+ 
    geom_line() + 
    geom_point() 

我必須添加一個虛擬group對美感的@UweBlock建議geom_line正常工作。

最後我選擇了我想在工具提示中顯示的內容(這裏我排除了group)。

require(plotly) 
ggplotly(, tooltip = c("x", "y", "text"))