微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

轴标题旁边的工具提示

如何解决轴标题旁边的工具提示

目前,我正在制作一个带有 rshiny 的仪表板,我可以在其中绘制图表。但是,我想知道是否有办法在图中的 X 和 Y 轴标题旁边添加工具提示

具体来说,在轴标题旁边有一个问号或(类似的东西),最终用户可以在其中单击或悬停以查看有关轴真正含义的更详细说明。

这样的东西(虽然不起作用):

layout(showlegend = FALSE,separators = ',.',xaxis = list(title = "Age",tooltip = "The age of every female above 50 years in the Unites States of America"))

解决方法

不幸的是,我不知道可以执行此操作的包,但您可以使用 plotly 和 HTML 和 JS 将容器绑定到包含工具提示的标题:

编辑:添加了 yaxis(这往往有点难)

df <- data.frame(a = 1:3,b = 4:6)

jscode <- "
$(document).ready(function() {
    $(\"[data-toggle='tooltip']\").tooltip({container: 'body'}); 
});
"

csscode <- HTML('
    .plot-container {
        position: relative;
    }
    .xaxis-container {
        height: 20px;
        position:absolute;
        bottom: 0;
        left: 40px;
        background: #fff;
        opacity: 0.5;
    }
    .yaxis-container {
        width: 20px;
        position:absolute;
        bottom: 0;
        left: 5px;
        background: #fff;
        opacity: 0.5;
    }
    .xaxis-tooltip {
        width: 30px;
        height: 20px;
        background: #000;
        margin:auto;
    }
    .yaxis-tooltip {
        width: 20px;
        height: 30px;
        background: #000;
        margin:auto;
    }
')

library(shiny)
library(plotly)

ui <- fluidPage(
  tags$head(
    tags$script(jscode),tags$style(csscode)
  ),div(class = 'plot-container',plotlyOutput("plot"),div(
        class = "xaxis-container",div(class = "xaxis-tooltip","data-toggle" = "tooltip","title" = "x")
      ),div(
        class = "yaxis-container",div(class = "yaxis-tooltip","title" = "y")
      )
  )
)

server = function(input,output) {
  output$plot <- renderPlotly({
    plot_ly() %>%
      add_trace(
        data = df,x =  ~ a,y =  ~ b,type = "scatter"
      ) %>%
      htmlwidgets::onRender("
          function(el,x) {
             var width = $('.draglayer')[0].getBoundingClientRect().width;
             var height = 0.5*$('.yaxis-tooltip')[0].getBoundingClientRect().height+$('.plot-container')[0].getBoundingClientRect().height-0.5*$('.draglayer')[0].getBoundingClientRect().height;
             $('.xaxis-container').css('width',width);
             $('.yaxis-container').css('height',height);
          }
        ")
  })
}

shinyApp(ui,server)

看起来像这样:

enter image description here

您可以将不透明度更改为 0 以使容器不可见,这只是概念证明。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。