ggplotly 破坏了我的 geom_smooth 元素

ggplotly is breaking my geom_smooth element

我正在构建一个 NBA R Shiny 应用程序,但我 运行 遇到了一个试图制作交互式图表的小问题。我的 Geom smooth 元素在我提供的第一组代码中工作,它显示了选定团队胜利边缘的平滑平均值,但是一旦我使用 ggplotly 实现自定义工具提示,geom smooth 元素就会停止工作。

mov_plot <- function(df){
  p <- df %>%
    ggplot(aes(Date, Margin_of_Victory)) +
    geom_col(color = 'black', alpha = 0.7, aes(fill = Outcome)) +
    geom_smooth(method = 'loess', se = FALSE, color = 'grey20', alpha = 0.4) +
    scale_y_continuous(breaks = c(-25, -20, -15, -10, -5, 0, 5, 10, 15, 20, 25)) +
    scale_fill_manual(values = c("red", "dark green")) +
    labs(x = NULL,
         y = 'Margin of Victory',
         title = paste0(df$FullName, ' Game Log History \n 2019-2020 NBA Season'),
         subtitle = '2019-2020 NBA Season') +
    theme_jacob()
  
  ggplotly(p)
  
}
mov_plot <- function(df){
  p <- df %>%
    ggplot(aes(Date, Margin_of_Victory, text = paste(Date, '<br>',
                                                     Outcome, ' vs', Opponent, '<br>',
                                                     'Scoreline: ', team_pts, ' - ', Opp_PTS, '<br>',
                                                     'Margin of Victory: ', Margin_of_Victory))) +
    geom_col(color = 'black', alpha = 0.7, aes(fill = Outcome)) +
    geom_smooth(method = 'loess', se = FALSE, color = 'grey20', alpha = 0.4) +
    scale_y_continuous(breaks = c(-25, -20, -15, -10, -5, 0, 5, 10, 15, 20, 25)) +
    scale_fill_manual(values = c("red", "dark green")) +
    labs(x = NULL,
         y = 'Margin of Victory',
         title = paste0(df$FullName, ' Game Log History \n 2019-2020 NBA Season'),
         subtitle = '2019-2020 NBA Season') +
    theme_jacob()
  
  ggplotly(p, tooltip = c('text'))
  
}

下面的 2 张图片显示了当我使用第二组代码时 geom_smooth 元素消失的问题。

如果有人有 plotly 的经验并且对潜在的修复有任何想法,我将不胜感激!

在您的 geom_smooth 中尝试 formula = 'y ~ x',如下所示

geom_smooth(method = 'loess', se = FALSE, formula = 'y ~ x', color = 'grey20', alpha = 0.4)

由于您没有提供示例数据框,因此很难验证。

geom_smooth 层试图包含 text 美学,在您的情况下您不想要。我建议您将 text 美学从 ggplot() 父函数移动到 geom_col() 函数,以便将工具提示放在列上。

如果感兴趣的 reader 想将工具提示放在 geom_smooth 上:

text 美学不适用于 geom_smooth,因为 geom_smooth 是一个聚合层,或者“ggplot2 生成的汇总统计数据”(https://plotly-r.com/controlling-tooltips.html#tooltip-text-ggplotly ). ggplotly 对象有不止一个“踪迹”——第二个踪迹可能是 geom_smooth 层。您可以先保存 ggplotly 对象

来探索这些子对象
w <- ggplotly(p)

然后看w$x$data。在geom_smooth上,工具提示会是“连续的”,所以横轴变量和纵轴变量可能分别保存在w$x$data[[2]]$xw$x$data[[2]]$y中。因此,工具提示中的文本可以填充这些向量:

# Suppress the tooltip on the columns and supply custom text to the smooth line
w %>%
  style(hoverinfo = "skip", traces = 1) %>%
  style(text = paste0(
      "Date: ", w$x$data[[2]]$x, "\nMargin of Victory: ", w$x$data[[2]]$y
    ), traces = 2)