簡體   English   中英

使用ggplotly時如何選擇變量顯示在工具提示中?

[英]How to choose variable to display in tooltip when using 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()

現在我想使用情節,主要是為了能夠,當鼠標懸停在某一點上時,獲取除價值之外的其他信息,例如公司名稱。 我試試這個:

require(plotly)
ggplotly()

這給我一個工具提示,但只有seq和值。 我嘗試了選項tooltip =但它指定你可以使用美學中唯一的變量描述,我不會在我的使用中使用該名稱。

有解決方案嗎 我看到我不是第一個遇到這個問題的人,但我還沒有找到與ggplotly合作的答案。

您不需要像@ royr2所建議的那樣修改plotly對象。 只需添加label = name作為第三美學

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

除了seqvalue之外,工具提示還會顯示name

ggplotly幫助文件說明了tooltip參數:

默認情況下,“全部”表示顯示所有美學映射(包括非官方的“文本”美學)。

因此,只要您不想將它用於geom_text您就可以使用label美學。

順便說一句:我也試過text而不是label

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

但隨后ggplot2抱怨道

geom_path:每組只包含一個觀察。 你需要調整群體美感嗎?

並且僅繪制點。 我不得不在geom_line添加一個虛擬組來刪除問題:

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

(但請注意,如果您將虛擬組放在aes()作為第四美學,它將默認顯示在工具提示中。)

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

編輯以回答評論中的問題: ggplotly()tooltip參數可用於控制外觀。 ggplotly(tooltip = NULL)將完全禁止工具提示。 ggplotly(tooltip = c("label"))選擇要包含在工具提示中的美學。

在@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)

在此輸入圖像描述

非官方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審美,以便geom_line正常工作,如@UweBlock建議的那樣。

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

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

您必須修改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

暫無
暫無

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

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