首页 > 解决方案 > 通过 paste() 修改悬停格式时,ggplot 更改输出样式

问题描述

当我对代码进行简单修改时发生的变化,我真的很困惑。

我想要的是,在交互式(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)

p1 <- ggplot(data = d,aes(x=seq,y=value)) + geom_line()
ggplotly(p1)  

输出很好。但是,当您将鼠标悬停在该行上时,该框会显示值和列名(此处为:“seq”和“value”)。我想摆脱“seq”和“value”。

我用谷歌搜索并找到了一个简单的解决方案,只需将选项“文本”添加到美学中。

p1 <- ggplot(data = d,
             aes(x=seq, y=value, text = value  )) + 
  geom_line()
ggplotly(p1,
         tooltip = c("text"))  

到目前为止,一切都很好。现在我想我通过一个简单的 paste() 将应该出现在图表中的两个数字粘贴在一起。

p1 <- ggplot(data = d,
             aes(x=seq, y=value, text = paste(value, '<br>', seq)  )) + 
  geom_line()
ggplotly(p1,
         tooltip = c("text"))  

但是,线条消失了!将鼠标悬停在框上会出现在这里和那里,但并非总是如此。

我可以通过将另一个字符串粘贴到 ONE 变量来进一步解决问题。这会导致相同的效果:由于 paste() 函数,线条会消失。我猜这个 paste() 和 geom_line() 之间存在一些问题,但我尝试了各种修改但没有成功。

p1 <- ggplot(data = d,
             aes(x=seq, y=value, text = paste("hello: ", value  ))) + 
  geom_line()
ggplotly(p1,
         tooltip = c("text"))  

有什么想法或建议吗?

在 Stefan 进一步测试和提示后更新:

通过添加一个虚拟组 = 1 作品到它的作品美学:

p1 <- ggplot(data = d,
             aes(x=seq, y=value, 
                 group = 1,
                 text = paste(value, '<br>', seq)  )) + 
  geom_line()
ggplotly(p1,
         tooltip = c("text"))  

尽管如此,为什么 paste() 对代码有这种影响仍然让我感到困惑。

标签: rggplot2ggplotly

解决方案


推荐阅读