我正在尝试在我 Shiny 的应用程序中使用 plotly 进行交互式视觉效果。但是,我在尝试向图表添加自定义工具提示时遇到了问题。如果我在 tooltip 中设置 ggplotly() 参数,那么我的 geom_line() 在我的输出中被忽略,但工具提示有效。
这是一个MRE:

library(shiny)
library(ggplot2)
library(plotly)
library(tidyquant) #only using the palette_dark() function
library(magrittr)

graph <- data %>%
  ggplot(aes(date, result, text = paste0("Site: ", site, "\n",
                                     "Quarter: ", quarter, "\n",
                                     "Year: ", year, "\n",
                                     "Result: ", result))) +
  facet_wrap(~site) +
  geom_point(color = palette_dark()[1]) +
  geom_line(color = palette_dark()[1]) +
  theme_bw()

 ggplotly(graph,
          tooltip = "text")
这给了我这个:
r - geom_line 在 ggplotly 中设置工具提示参数时不绘图-LMLPHP
如果我将 data = aes() 调用从 ggplot 调用移动到单个 geom s,那么这些行仍然没有显示:
graph <- ggplot() +
  facet_wrap(~site) +
  geom_point(data = data,
             aes(date, result,
                 text = paste0("Site: ", site, "\n",
                               "Quarter: ", quarter, "\n",
                               "Year: ", year, "\n",
                               "Result: ", result)),
             color = palette_dark()[1]) +
  geom_line(data = data,
            aes(date, result,
                text = paste0("Site: ", site, "\n",
                              "Quarter: ", quarter, "\n",
                              "Year: ", year, "\n",
                              "Result: ", result)),
            color = palette_dark()[1]) +
   theme_bw()

ggplotly(graph,
     tooltip = "text")
这给了我相同的输出,工具提示仍然有效。但是,现在我收到两个警告:

如果我仅从 text= 函数中删除 geom_line() 参数,则会绘制线条,但工具提示不再有效:
r - geom_line 在 ggplotly 中设置工具提示参数时不绘图-LMLPHP
问题:
如何在仍然绘制我的 geom_line() 的同时使自定义工具提示起作用?
我的数据:
data <- structure(list(site = c("Site 1", "Site 1", "Site 1", "Site 1",
                                    "Site 2", "Site 2", "Site 2", "Site 2",
                                    "Site 3", "Site 3", "Site 3", "Site 3",
                                    "Site 4", "Site 4", "Site 4", "Site 4",
                                    "Site 5", "Site 5", "Site 5", "Site 5"),
                           parameter = c("Testing Parameter", "Testing Parameter",
                                         "Testing Parameter", "Testing Parameter",
                                         "Testing Parameter", "Testing Parameter",
                                         "Testing Parameter", "Testing Parameter",
                                         "Testing Parameter", "Testing Parameter",
                                         "Testing Parameter", "Testing Parameter",
                                         "Testing Parameter", "Testing Parameter",
                                         "Testing Parameter",  "Testing Parameter",
                                         "Testing Parameter", "Testing Parameter"),
                           year = c(2016, 2017, 2017, 2017, 2016, 2017, 2017, 2017,
                                    2016, 2017, 2017, 2017, 2016, 2017, 2017, 2017,
                                    2016, 2017, 2017, 2017),
                           quarter = c(4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L,
                                       3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L),
                           result = c(22.87, 31.78, 54.76, 44.3, 27.78, 34.04, 53.27,
                                      46.83, 19.83, 34.05, 31.18, 35.7,  24.11, 33.57,
                                      47.5, 40.53, 29.4, 34.6, 53.18, 46.16),
                           count = c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
                                     3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L),
                           date = structure(c(17075, 17167, 17257, 17348, 17075,
                                              17167, 17257, 17348, 17075, 17167,
                                              17257, 17348, 17075, 17167,  17257,
                                              17348, 17075, 17167, 17257, 17348),
                                            class = "Date")),
                      class = c("tbl_df", "tbl", "data.frame"),
                      row.names = c(NA, -20L),
                      .Names = c("site", "parameter", "year", "quarter", "result",
                                 "count", "date"))

最佳答案

我认为线条没有出现是因为 ggplot 不知道哪些点连接在一起。我试图绘制第一个 graph (不使用 ggplotly 转换为 plotly 对象),并得到以下警告:

> graph
geom_path: Each group consists of only one observation. Do you need to adjust the
group aesthetic?

group = site 添加到第一组代码对我有用:
library(ggplot2); library(dplyr)

graph <- data %>%
  ggplot(aes(x = date, y = result,
             text = paste0("Site: ", site, "\n",
                           "Quarter: ", quarter, "\n",
                           "Year: ", year, "\n",
                           "Result: ", result),
             group = site)) +
  facet_wrap(~site) +
  geom_point() + # default palette since I don't have tidyquant
  geom_line() +
  theme_bw()

plotly::ggplotly(graph, tooltip = "text")

r - geom_line 在 ggplotly 中设置工具提示参数时不绘图-LMLPHP

关于r - geom_line 在 ggplotly 中设置工具提示参数时不绘图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46241436/

10-16 19:26