Ошибка при добавлении пользовательской всплывающей подсказки на график с использованием ggplotly - PullRequest
0 голосов
/ 20 января 2020

Это довольно специфическая проблема, поэтому я включил минимальный воспроизводимый пример ниже:

library(dplyr)
library(ggplot2)
library(magrittr)
library(plotly)
library(shiny)

example_data <- tibble(
  target = factor(rep(LETTERS[1:5], each = 6)),
  error = runif(30, -1, 1),
  model = factor(rep(c('Model 1', 'Model 2'), times = 15)),
  type = factor(rep(rep(c('Type 1', 'Type 2', 'Type 3'), each = 2), times = 5))
)

ui <- fluidPage(
  plotlyOutput('plot')
)

server <- function(input, output) {
  output$plot <- renderPlotly({
    p <- example_data %>%
      #mutate(label = paste0(model, ' (', type, ')')) %T>%  # <- doesn't work
      mutate(label = paste0(model, ' (Foo)')) %T>%  # <- does work
      {print(., n = Inf)} %>%  # debugging
      ggplot(aes(x = target, y = error, text = label)) +
        geom_violin(aes(fill = target), show.legend = FALSE) +
        geom_jitter(width = 0.1) +
        coord_flip()

    ggplotly(p, tooltip=c('text'))
  })
}

shinyApp(ui, server)

По сути, я хочу добавить настраиваемую подсказку к выводу на графике в виде блестящего. Когда я пытаюсь сделать это, комбинируя два столбца моего набора данных вместе, я получаю следующую ошибку:

Warning in max(data$density) :
  no non-missing arguments to max; returning -Inf
Warning: Error in order: argument 1 is not a vector

Я пытаюсь понять, как это связано с моим кодом. С другой стороны, если я объединю один из моих столбцов с фиктивной текстовой строкой (Foo), всплывающие подсказки будут отображаться без ошибок. Вы можете переключаться между этими двумя подходами, переключаясь между комментариями в строке 21/22.

Возможно, я упускаю что-то очевидное здесь, но я полностью озадачен тем, что происходит. У кого-нибудь есть идеи или это может быть ошибкой?

1 Ответ

0 голосов
/ 21 января 2020

Я понял это, поэтому поделюсь, если кто-нибудь сталкивался с этим. Оказывается, эта проблема не имеет ничего общего с блеском или графикой, а скорее с ggplot.

Похоже, что установка text aestheti c в начальном отображении имеет эффект "зацепки" для geom_violin. В частности, несмотря на то, что text не является известной эстетией c для geom_violin, ее включение изменяет группировку скрипок. Так как метка была уникальной для каждой точки данных, я пытался создать скрипичный сюжет для каждой точки данных сам по себе - невозможно. При установке group = target в сопоставлениях geom_violin проблема устраняется.

Трудно сказать, является ли это ошибкой или функцией, поэтому я еще раз урежу пример и добавлю его в качестве проблемы в репозиторий ggplot.

...