R Plot():带有条件内容的悬停模板 [英] R plotly(): hovertemplate with conditional content

查看:25
本文介绍了R Plot():带有条件内容的悬停模板的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一张太阳暴发图,我想展示一些气垫船信息,因为标签很长。 一个可重现的小示例:

library(plotly)
library(dplyr)
library(htmlwidgets)
library(widgetframe)
library(stringr)
library(htmltools)

df <- data.frame(lab = c("Eve", "Cain", "Seth", "Enos", "Noam", "Abel", "Awan", "Enoch", "Azura"),
            par= c("", "Eve", "Eve", "Seth", "Seth", "Eve", "Eve", "Awan", "Eve"),
            ID = c(1,11,12,121,122,13,14,141,15),
            parentID =c(NA,1,1,12,12,1,1,14,1),
            val = c(10, 14, 12, 10, 2, 6, 6, 4, 4))

fig2 <- plot_ly(ids=df$ID,
               labels = df$lab,
               parents = df$parentID,
               values = df$val,
               type = 'sunburst',
               maxdepth=2,
               hovertemplate = paste('%{label}','<br>%{value} EUR<extra></extra>','<br>Anteil an %{parent}','%{percentParent: .1%}'),
                            )
fig2
  

对于每个元素,我希望包含有关父元素份额的信息,单位为%。 如果我使用

hovertemplate = paste('%{label}','<br>%{value} EUR<extra></extra>','<br>Anteil an %{parent}','%{percentParent: .1%}')

产生hoverinfo of Element with parent,显示";Anteil an[Parent]x%

但是对于根元素,由于没有父元素,我得到以下hoverinfo for root elementANTEIL an null 100,0%";。

因此,对于根元素,我只想显示包括标签和值的第一部分,但没有显示空值100,0%";。

到目前为止,我尝试了If Else表达式。

hovertemplate = if (any(is.na(df[,parent]))) {paste('%{label}','<br>%{value} EUR<extra></extra>')} else {paste('%{label}','<br>%{value} EUR<extra></extra>','<br>Anteil an %{parent}','%{percentParent: .1%}')},

这不起作用。

另外,我找到了类似的主题here,但不知道如何使用。

有没有人知道如何根据我的需要修改hoverinfo?

推荐答案

您在正确的轨道上。但是,不使用if,而使用矢量化ifelse。此外,您还可以将hovertemplate作为列添加到您的DF中,这至少在我看来使parentID更容易设置条件,并产生更干净的代码:

library(plotly)
library(dplyr)

df <- df %>% 
  mutate(hovertemplate = ifelse(!is.na(parentID),
                                paste('%{label}','<br>%{value} EUR<extra></extra>',
                                      '<br>Anteil an %{parent}','%{percentParent: .1%}'),
                                paste('%{label}','<br>%{value} EUR<extra></extra>')))
fig2 <- plot_ly(ids=df$ID,
                labels = df$lab,
                parents = df$parentID,
                values = df$val,
                type = 'sunburst',
                maxdepth=2,
                hovertemplate = df$hovertemplate,
)
fig2

这篇关于R Plot():带有条件内容的悬停模板的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆