【问题标题】:geom_line not plotting when tooltip argument set in ggplotly在 ggplotly 中设置工具提示参数时,geom_line 不绘图
【发布时间】:2018-02-24 18:08:51
【问题描述】:

我正在尝试在我闪亮的应用程序中使用 plotly 来实现交互式视觉效果。但是,我在尝试向图表添加自定义工具提示时遇到了问题。如果我在ggplotly() 中设置tooltip 参数,那么我的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")

这给了我这个:

如果我将data = aes() 调用从ggplot 调用移动到个人geoms,那么这些行仍然没有显示:

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") 

这给了我相同的输出,工具提示仍然有效。但是,现在我收到两个警告:

警告:忽略未知的美学:文本

警告:忽略未知的美学:文本

如果我仅从 geom_line() 函数中删除 text= 参数,则会绘制线条,但工具提示不再起作用:

问题:

如何在绘制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"))

【问题讨论】:

    标签: r ggplot2 shiny plotly


    【解决方案1】:

    我认为线条没有出现是因为 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")
    

    【讨论】:

    • 这样就行了!我原以为facet_wrap 调用会在内部处理这个问题,但现在我知道了!谢谢!
    • 在更复杂的图表中,您可能需要在每个方面中包含多条线,因此最好分别处理它们。 :)
    • @Z.Lin 你知道如果你通过 2 个变量执行 facet_wrap 该怎么办吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-06
    • 2019-08-22
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    • 2020-01-28
    • 1970-01-01
    相关资源
    最近更新 更多