[英]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()
除了seq
和value
之外,工具提示還會顯示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"))
選擇要包含在工具提示中的美學。
非官方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.