В R могу ли я отсортировать легенду сюжета по нескольким факторам?

#r #ggplot2 #plotly #tidyverse #ggplotly

Вопрос:

Моя цель состоит в том, чтобы связать точки с несколькими атрибутами легенды, чтобы помочь кому-то активно фильтровать график для сравнения. Например, я попытался связать каждую точку в своем коде с ее DP и ее описанием независимо. таким образом, я мог бы скрыть все точки, кроме точек DP1, или показать результаты только одного теста. вместо этого мой код делает каждую точку уникальной как комбинацию своих факторов. Спасибо вам за вашу помощь!

Вот моя попытка.

 library(tidyverse)
library(plotly)

df = read.csv("C:/Users/nicho/Documents/R/Test.csv")

output = df %>%
ggplot(df,mapping = aes(Wave,Score,col = factor(Level),
                        text = paste("DP:",DP,"<br>",
                                     "Wave:",Wave,"<br>",
                                     "Level:",Level,"<br>",
                                     "Score:",Score,"<br>",
                                     "Desc:",Desc
                                     
                        )
                        
                        )) 
  geom_line(mapping = aes(group = DP)) 
  geom_point(mapping = aes(col =factor(DP),shape = factor(Desc))) 
  facet_grid(~Location)

font = list(
  size = 15,
  color = "white"
)

label = list(
  bgcolor = "#232F34",
  bordercolor = "transparent",
  font = font
  
)


ggplotly(output, tooltip = c("text")) %>%
  style(hoverlabel = label) %>%
  layout(font = font)
 

Выход

Комментарии:

1. Я не совсем понимаю, в чем заключается ваш вопрос. Каков именно желаемый результат?

2. Я сожалею, что желаемым результатом было бы наличие одной точки, которую можно было бы визуально отключить на выходном графике, на основе атрибутов, которые я хочу видеть… например, у каждой точки есть DP, Волна, Уровень, Оценка и Desc. Я хочу отобразить их в легенде, чтобы я мог скрыть то, что я не хочу видеть, по их атрибутам. Например, я хочу отобразить только все точки «DP1» или все точки «тест 1».

Ответ №1:

Это решение, которое я в конце концов нашел для всех, кто сталкивается с этим, я пытался отфильтровать результаты своего графика таким образом…

 library(shinydashboard)
library(shiny)

#______________________________________________________________________________#
server <- function(input, output, session) { 
    df <- reactive({
        subset(iris, Petal.Width == input$Petalw)
    })
    
    # Extract list of Petal Lengths from selected data - to be used as a filter
    p.lengths <- reactive({
        unique(df()$Petal.Length)
    })
    
    # Filter based on Petal Length
    output$PetalL <- renderUI({
        selectInput("PetalLengthSelector", "PetalLength", as.list(p.lengths()))
    })
    
    # Subset this data based on the values selected by user
    df_1 <- reactive({
        foo <- subset(df(), Petal.Length == input$PetalLengthSelector)
        return(foo)
    })
    
    output$table <- DT::renderDataTable(
        DT::datatable(df_1(), options = list(searching = FALSE,pageLength = 25))
    )
    ###JUNK
    output$correlation_plot <- renderPlot({
        plot(df_1()$Petal.Length, df_1()$Petalw,
             xlab = "Length", ylab = "Width")
    })
}

#______________________________________________________________________________#
ui <- navbarPage(
    title = 'Select values in two columns based on two inputs respectively',
    
    fluidRow(
        column(width = 12,
    plotOutput('correlation_plot')
        )
    ),
    
    
    fluidRow(
        column(width = 3,
               selectInput("Petalw","PetalWidth", choices = unique(iris$Petal.Width),multiple = T),
               uiOutput("PetalL")
        ),
        column(9,
               tabPanel('Table', DT::dataTableOutput('table'))
        )
    )
)
shinyApp(ui, server)