提问人:Malta 提问时间:3/31/2016 最后编辑:MLavoieMalta 更新时间:5/15/2018 访问量:54751
使用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()
现在我想使用 plotly,主要是为了让能够在将鼠标悬停在一个点上时,获取值以外的其他信息,例如公司名称。我试试这个:
require(plotly)
ggplotly()
这给了我一个工具提示,但只有 seq 和 value。我尝试了选项 tooltip=,但它被指定您可以使用美学中描述的唯一变量,并且我没有在我的 aes 中使用该名称。
有什么解决办法吗?我看到我不是第一个遇到这个问题的人,但我还没有找到使用 ggplotly 的答案。
答:
为此,您必须修改 。或者改用创建图表...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
评论
plotly v4.0.1
您无需按照@royr2的建议修改对象。只需添加为第三种美学plotly
label = name
ggplot(data = d, aes(x = seq, y = value, label = name)) + geom_line() + geom_point()
并且工具提示将显示除 和 之外的 。name
seq
value
帮助文件说明了参数:ggplotly
tooltip
默认值为“all”,表示显示所有美学映射(包括非官方的“文本”美学)。
所以只要你不想用它来使用,你就可以使用美学。label
geom_text
顺便说一句:我也试过而不是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()
但是,我发现如果您想在工具提示中绘制和显示不同的字符串,那么非官方的美学可能会变得很有用。text
label
geom_text
编辑以回答评论中的问题:可用于控制外观的参数。 将完全禁止显示工具提示。 选择要包含在工具提示中的美学。tooltip
ggplotly()
ggplotly(tooltip = NULL)
ggplotly(tooltip = c("label"))
评论
label = name
name: companyX
text = name
companyX
str_c('Line 1: ', line1_col, '<br> Line 2: ', line2_col', ...)
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)
评论
p = ggplot(iris, aes(label=Species, label2=Petal.Length, label3=Petal.Width)) + geom_point(aes(Sepal.Length,Sepal.Width))
非官方的美学允许你引入所有你想要的变量(这里我用了两次来展示它):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()
我必须添加一个虚拟美学才能按照@UweBlock的建议正常工作。group
geom_line
最后,我选择要在工具提示中显示的内容(此处我排除了)。group
require(plotly)
ggplotly(, tooltip = c("x", "y", "text"))
评论