为长文本标签在 plotly 中格式化工具提示

Posted

技术标签:

【中文标题】为长文本标签在 plotly 中格式化工具提示【英文标题】:Format tooltip in plotly for long text labels 【发布时间】:2019-09-02 18:17:12 【问题描述】:

考虑下面的简单示例。有没有办法格式化绘图工具提示,使得长文本标签在框中可见,而不是这个切断值的荒谬矩形?

library(ggplot2); library(plotly)

df <- data.frame(x = 1:10, y = 1:10, z = rep("the longggggggggggggggggggggggggggggestttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt labelllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll you can imagineeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", 10))

p <- ggplot(df, aes(x,y,label=z)) + geom_point()
ggplotly(p, tooltip = "label")

【问题讨论】:

【参考方案1】:

我很确定,在某个地方存在更优雅的解决方案。我只能建议你像每个n 字符一样休息一下。 https://***.com/a/2352006/9300556 有一个很好的解决方法:

gsub('(.1,90)(\\s|$)', '\\1\n', s)

它将字符串“s”分成最多 90 个字符的行(不包括 换行符“\n”,但包括字间空格), 除非有一个词本身超过 90 个字符,否则该词 本身会占据一整行。

所以我们只需要将gsub() 添加到ggplot 美学中:

p <- ggplot(df, aes(x,y,
            text = gsub('(.1,20)(\\s|$)', '\\1\n', z))) +
  geom_point()

ggplotly(p, tooltip = "text")

更新

这是来自@Rich Pauloo 的 cmets 的更优雅的解决方案。在这种情况下,您的字符串也将大部分被填充(但实际上是自动对齐的)。但是,填充取决于绘图分辨率和标签位置。

library(stringr)

p <- ggplot(df,
            aes(x, y,
                text = stringr::str_wrap(
                  string = z,
                  width = 20,
                  indent = 1, # let's add extra space from the margins
                  exdent = 1  # let's add extra space from the margins
                ))) +
  geom_point()

ggplotly(p, tooltip = "text")

【讨论】:

优秀的答案,感谢 Twitter 的关注!似乎我们在处理类似的问题。您的回答实际上使我得到了一个更简洁的答案,它具有左对齐文本的额外好处。请考虑将其添加到您自己的答案中,我会接受!在 ggplot 美学中,使用text = stringr::str_wrap(z, width = 20)。从文档中,此函数使用 Knuth-Plass 段落换行算法。 @RichPauloo 太棒了!我已经更新了我的答案。希望在你的一些作品中看到它;)

以上是关于为长文本标签在 plotly 中格式化工具提示的主要内容,如果未能解决你的问题,请参考以下文章

R语言配对图(pair plot)可视化:pivot_longer函数将宽格式的数据重塑为长格式并进行数据全连接(full join)可视化基本的配对图(pair plot)

R语言配对图(pair plot)可视化:pivot_longer函数将宽格式的数据重塑为长格式并进行数据全连接(full join)可视化基本的配对图(pair plot)

使用ggplotly时在plotly中格式化鼠标在标签上

ggplotly 工具提示中的日期格式

Plotly:悬停文本字段中的日期格式问题

格式化悬停数据标签 Plotly R