[英]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.