当我们将悬停标签移到 R 中 Plotly 图表的错误栏上时,有什么方法可以禁用悬停标签吗?

Is there any way to disable the hover label when we move it over the error bars in Plotly graph in R?

当我们将悬停标签移到错误栏上时,有什么方法可以禁用悬停标签吗?我正在使用 ggplotly 绘制图表。当光标移动到图表顶部时,我正在使用工具提示函数来表示条形图中的值。

    Source_Data <-
    data.frame(
    key = c(1, 1, 1, 2, 2, 2, 3, 3, 3),
    Product_Name = c(
      "Table",
      "Table",
      "Chair",
      "Table",
      "Bed",
      "Bed",
      "Sofa",
      "Chair",
      "Sofa"
    ),
    Product_desc = c("XX", "XXXX", "YY", "X", "Z", "ZZZ", "A", "Y", "A"),
    sd = c(0.1, 0.3, 0.4, 0.5, 0.6, 0.7, 0.7, 0.8, 0.5),
    Cost = c(1, 2, 3, 4, 2, 3, 4, 5, 6)

   )

ggplotly((
   Source_Data %>%
    ggplot(
      aes(
        Product_Name,
        Cost,
        ymin = Cost - sd,
        ymax = Cost + sd,
        fill = Product_desc,
        text = paste("Product Name:", Product_Name, "<br>", "Cost:", Cost)
      )
    ) +
    geom_col(position = position_dodge2(width = .9, preserve = "single")) +
    geom_errorbar(position = position_dodge2(
      width = .9,
      preserve = "single",
      padding = .5
    )) +
    geom_text(
      aes(y = Cost + sd, label = Cost),
      position = position_dodge2(width = .9),
      vjust = -1
    ) +
    facet_wrap( ~ key, scales = "free_x", strip.position = "bottom") +
    theme(strip.placement = "outside") +
    theme_bw()
    ),
   tooltip = "text"
   )

当我将光标移到条上时,我得到了文本值,这很好。但我希望仅当我将光标移到条上时才显示它,并且当我移到错误条上时不应弹出任何值。

我愿意接受所有建议。

您只能在 geom_col 部分定义 text 变量:

library(ggplot2)
library(plotly)
library(dplyr)
Source_Data <-
    data.frame(
        key = c(1, 1, 1, 2, 2, 2, 3, 3, 3),
        Product_Name = c(
            "Table",
            "Table",
            "Chair",
            "Table",
            "Bed",
            "Bed",
            "Sofa",
            "Chair",
            "Sofa"
        ),
        Product_desc = c("XX", "XXXX", "YY", "X", "Z", "ZZZ", "A", "Y", "A"),
        sd = c(0.1, 0.3, 0.4, 0.5, 0.6, 0.7, 0.7, 0.8, 0.5),
        Cost = c(1, 2, 3, 4, 2, 3, 4, 5, 6)

    )

ggplotly((
    Source_Data %>%
        ggplot(
            aes(
                Product_Name,
                Cost,
                ymin = Cost - sd,
                ymax = Cost + sd,
                fill = Product_desc
                # ,
                # text = paste("Product Name:", Product_Name, "<br>", "Cost:", Cost)
            )
        ) +

        geom_errorbar(position = position_dodge2(
            width = .9,
            preserve = "single",
            padding = .5
        )) +

        # geom_text(aes(y = Cost + sd, label = Cost),
        #     position = position_dodge2(width = .9),
        #     vjust = -1
        # ) +
        geom_col(position = position_dodge2(width = .9, preserve = "single"), 
                 aes(text = paste("Product Name:", Product_Name, "<br>", "Cost:", Cost))) +
        facet_wrap( ~ key, scales = "free_x", strip.position = "bottom") +
        theme(strip.placement = "outside") +
        theme_bw()
),
tooltip = "text"
)

编辑: 考虑到张贴者观察到的问题,以保持元素在(闪亮?弹性?)仪表板中排列,如果这是一个选项,那么在 plotly 布局中设置 autoscale = FALSE 可能会有所帮助。也许以下内容可以用于绘图部分:


p1 <- ggplot(data = Source_Data, aes(Product_Name, Cost, ymin = Cost - sd,
        ymax = Cost + sd, fill = Product_desc)) +
    geom_col(position = position_dodge2(width = .9, preserve = "single"), 
             aes(text = paste("Product Name:", Product_Name, "<br>", "Cost:", Cost))) +
    geom_errorbar(position = position_dodge2(width = .9, preserve = "single", 
                                             padding = .9)) +
    facet_wrap( ~ key, scales = "free_x", strip.position = "bottom") +
    theme(strip.placement = "outside") +
    theme_bw() 

ggplotly(p1, tooltip = "text") %>% plotly::layout(autosize=FALSE)