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

时间:2016-03-31 05:50:44

标签: r ggplot2 plotly r-plotly 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合作的答案。

4 个答案:

答案 0 :(得分:42)

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

ggplot(data = d, aes(x = seq, y = value, label = name)) + geom_line() + geom_point()
除了nameseq之外,

工具提示会显示value

ggplotly帮助文件说明了tooltip参数:

  

默认值为&#34; all&#34;,表示显示所有美学映射(包括非官方&#34;文字&#34;美学)。

因此,只要您不想将其用于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"))选择要包含在工具提示中的美学。

答案 1 :(得分:27)

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

enter image description here

答案 2 :(得分:12)

非正式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"))

答案 3 :(得分:10)

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