R语言 使用ggplotly时如何选择变量显示在工具提示中?

llycmphe  于 11个月前  发布在  其他
关注(0)|答案(4)|浏览(95)

我有一个简单的数据框架:

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=,但它指定了你可以使用唯一的变量describe在美学中,我不使用我的aes名称。
有什么解决办法吗?我发现我不是第一个遇到这个问题的人,但是我还没有找到解决办法。

dphi5xsq

dphi5xsq1#

您不需要按照@royr2的建议修改plotly对象。只需添加label = name作为第三个美学

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

字符串
工具提示将显示name以及seqvalue
ggplotly帮助文件介绍了tooltip参数:
默认的“all”,意味着显示所有的美学Map(包括非官方的“文本”美学)。
因此,只要您不想将其用于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()


(But注意,如果你把虚拟组作为第四个美学放在aes()里面,它也会默认出现在工具提示中。
然而,我发现如果你想用geom_text绘制不同的字符串并在工具提示中显示,非官方的text美学可以和label一起使用。

编辑以回答评论中的问题:ggplotly()tooltip参数可用于控制外观。ggplotly(tooltip = NULL)将完全抑制工具提示。ggplotly(tooltip = c("label"))选择要包含在工具提示中的美学。

mgdq6dx1

mgdq6dx12#

基于@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)

字符串
x1c 0d1x的数据

omqzjyyz

omqzjyyz3#

非官方的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建议的那样为geom_line添加一个虚拟的group美学来正常工作。
最后,我选择了我想在工具提示中显示的内容(这里我排除了group)。

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

mzillmmw

mzillmmw4#

你必须修改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

字符串

相关问题