наведите дополнительную информацию с Shiny & ggplotly - PullRequest
0 голосов
/ 09 июля 2019

Я просматривал этот сайт в поисках ответов на мою проблему с Shiny and Plotly (ggplotly), но ни одного из них было недостаточно.Я пытаюсь настроить текстовое поле моего ggplotly.Я бы включил больше переменных в этот текстовый блок, когда вы наводите указатель мыши на любую точку моего графика.

Я пытался использовать это решение
Любой способ отображения информации о кадре данных, кроме х иу при наведении курсора с блестящим / ggplot? и этот: блестящий: интерактивный ggplot с вертикальной линией и метками данных в точке наведения мыши

без какого-либо успешного результата

Я работаю, пытаясь создать визуализацию для футбольных данных, у меня есть этот огромный df, который имеет следующие переменные:

     [1] "ID"              "Nombre"          "Apellido"        "Rol"            
 [5] "Tecnica"         "Club"            "Competicion"     "Nacionalidad"   
 [9] "PrimerToque"     "Dribbling"       "Versatilidad"    "Pases"          
[13] "Centros"         "Remate"          "TiroLibre"       "Cabezazo"       
[17] "TiroLejano"      "SaqueLateral"    "Marcaje"         "Penales"        
[21] "Tacle"           "Corner"          "Aceleracion"     "Stamina"        
[25] "Fuerza"          "Agilidad"        "Balance"         "TendenciaLesion"
[29] "Salto"           "FormaNatural"    "Velocidad"       "FechaNacimiento"
[33] "AnoNacimiento"   "CA"              "PA"              "RepHome"        
[37] "RepActual"       "RepMundial"      "Consistencia"    "Altura"         
[41] "Peso"            "Posicion"  

это мой ui файл

library("shiny")
library("shinythemes")
library("shinyWidgets")
library("shinydashboard")
library("leaflet")
library("ggplot2")
library("dplyr")
library("ggrepel")
library("plotly")

ui <- shinyUI(fluidPage(

  # Application title
  titlePanel("Graph"),       

  sidebarLayout(
    sidebarPanel(
      selectizeInput("Atributo1",  #xaxis 
                     label = "AtributoX",
                     choices = c("Centros", "Pases", "PrimerToque", "Remate", "Tecnica","Dribbling","TiroLejano",
                                 "TiroLibre", "SaqueLateral","Penales", "Corner" ,"Cabezazo", "Salto", "Aceleracion",
                                 "Stamina", "Fuerza","Agilidad","Balance","TendenciaLesion","FormaNatural","Velocidad", 
                                 "Marcaje", "Tacle","Consistencia", "Versatilidad", "CA", "RepHome"), selected ="CA"),
      selectizeInput("Atributo2",  #yaxis 
                     label = "AtributoY",
                     choices = c("Centros", "Pases", "PrimerToque", "Remate", "Tecnica","Dribbling","TiroLejano",
                                 "TiroLibre", "SaqueLateral","Penales", "Corner" ,"Cabezazo", "Salto", "Aceleracion",
                                 "Stamina", "Fuerza","Agilidad","Balance","TendenciaLesion","FormaNatural","Velocidad", 
                                 "Marcaje", "Tacle","Consistencia", "Versatilidad", "CA", "RepHome")),

      sliderInput("numero", "Numero de Jugadores a Mostrar:",
                  value = 10, min = 1, max = 50, round = TRUE, dragRange = FALSE),
      numericInput("Edad1", "Edad:", 42, value = 17),
      numericInput("Edad2", "Edad:", 42),

      sliderTextInput("Posicion","Posicion" , 
                      choices = c("GK","DL","DR","DC","DM","MC","ML","MR","AMC", "ST"), 
                      selected = c("MC"), #incase you want all values by default 
                      animate = FALSE, grid = FALSE, 
                      hide_min_max = FALSE, from_fixed = FALSE,
                      to_fixed = FALSE, from_min = NULL, from_max = NULL, to_min = NULL,
                      to_max = NULL, force_edges = FALSE, width = NULL, pre = NULL,
                      post = NULL, dragRange = TRUE),
      radioButtons("Color", label = "Color Por:",
                   choices = list("Club" = "Club", "Division" = "Competicion"), 
                   selected = "Club")
    ),          

    mainPanel(

      plotlyOutput("distPlot")
    )
  )
))

и мой сервер файл

server <- shinyServer(function(input, output) {

  output$distPlot <- renderPlotly({ #Plot tipo Plotly

    n <- input$numero
    if (is.null(n)) {
      n <- 1
    }

    dfjoin <- readRDS("dfjoin.rds")

    a <- reactive({
    dfjoin %>% filter(Posicion == input$Posicion) %>% filter(FechaNacimiento >= input$Edad1 & FechaNacimiento <= input$Edad2) %>% top_n(n, CA)
    })

    p <- ggplot(a(), aes_string(x = input$Atributo1, y = input$Atributo2, 
                              label = "Apellido", colour = input$Color)) + 
      geom_text(position=position_jitter(h=1,w=1), check_overlap = TRUE) +
      labs(colour= input$Color, title= paste("Grafico", input$Atributo1, "/",  input$Atributo2, sep =" ")) +
      theme(legend.position = "none")

    p <- ggplotly(p)

    print(p)
  })
})

В настоящее время я получаю только информацию о наведении по умолчанию, которая представляет собой метку, ось X, ось Y и цвет.Я хотел бы настроить и включить другие переменные, как положить имя и фамилию.Что было бы что-то вроде: paste (Nombre, Apellido, sep = "")

Я попробовал эту строку внутри подсказки:

$ggplotly(p, Tooltip = paste(Nombre,Apellido, sep = " "))

, но не сработал ни один.

как подсказка: на испанском языке: Nombre = Имя Апеллидо: Фамилия

enter image description here

Ответы [ 2 ]

0 голосов
/ 12 июля 2019

Я так и делал:

https://github.com/Bustami/DatoFutbol/blob/master/libertadores2019/shiny-app/server.R

В основном создайте новый столбец со всем интересующим вас текстом (вызывая переменные, выбранные пользователем) с синтаксисом HTML, а затем используйте его с параметром «label» внутри ggplot и «tooltip» внутри ggplotly.

0 голосов
/ 11 июля 2019

спасибо Стефан, но это не работает для меня, как я сказал в первом сообщении. Поскольку я работаю с Shiny, мне нужно установить переменные (пользователь может выбрать, какие переменные хотят визуализировать) с помощью aes_string. Так что мой код на данный момент выглядит так:

p <- ggplot(a(), aes_string(x = input$Atributo1, y = input$Atributo2, 
                          label = "Apellido", colour = input$Color, text = paste("Value: ", a$CA, "</br>Max: ")))  +  ##Line text as your post recommended 
  geom_text(position=position_jitter(h=1,w=1), check_overlap = TRUE) +
  labs(colour= input$Color, title= paste("Grafico", input$Atributo1, "/",  input$Atributo2, sep =" "), subtitle = "Data: Football Manager 2019") +
  theme(legend.position = "none")

p <- ggplotly(p)

В частности, я хотел бы установить переменные CA, которые должны отображаться независимо от того, какую переменную выбрал пользователь. GGplot построен из реактивных данных, называемых a, как вы можете видеть в начале моего кода. Пожалуйста, любые советы или подсказки будут оценены.

...