Выберите разноцветные линии на графике R Shiny - PullRequest
0 голосов
/ 03 февраля 2019

Я пытаюсь создать блестящее приложение, которое отображает до 2 разноцветных линий в зависимости от того, что пользователь выбрал для просмотра.Тем не менее, я получаю сообщение об ошибке «неожиданный символ».

Я думаю, что проблема в строке selectInput(inputId = "z", label = "Source", choices = c("social_media", "google_ads"), selected = c("social_media", "google_ads"), multiple = TRUE) в приведенном ниже коде, как при замене choices и selected на source,график, кажется, работает (хотя не позволяет пользователю выбирать и просматривать различные параметры).

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

av_purchase_count     days_since_first_use    source
2                     1                       social_media
5                     2                       social_media
4                     1                       google_ads
6                     2                       google_ads

... и здесьэто код, который я пробовал:

library(shiny)
library(ggplot2)
df <- read_xlsx("~/df.xlsx")

ui <- fluidPage(

   titlePanel("df"),

   sidebarLayout(
      sidebarPanel(
         selectInput(inputId = "x", label = "Days since first use", choices = "days_since_first_use", selected = "days_since_first_use"),
         selectInput(inputId = "y", label = "Average Purchase Count", choices = "av_purchase_count", selected = "av_purchase_count"),
         selectInput(inputId = "z", label = "Source", choices = c("social_media", "google_ads"), selected = c("social_media", "google_ads"), multiple = TRUE)
      ),

      mainPanel(
         plotOutput("scatterplot")
      )
   )
)

server <- function(input, output) {

   output$scatterplot <- renderPlot({
      # generate bins based on input$bins from ui.R
     ggplot(data = df, aes_string(x = input$x, y = input$y, colour = input$z)) +
       geom_point()
      })
}

shinyApp(ui = ui, server = server)

Я бы хотел, чтобы конечный график позволял пользователю выбирать, хотят ли они видеть результаты для google_ads, social_media или для обоих (по умолчанию оба).

Большое спасибо, надеюсь, это имеет смысл.

1 Ответ

0 голосов
/ 03 февраля 2019

Вы можете достичь этого с помощью

output$scatterplot <- renderPlot({
  ggplot(
    data = df %>% filter(source %in% input$z),
    aes_string(x = input$x, y = input$y)
  ) + geom_point(aes(colour = source))
})

Переменная input$z отражает то, что пользователь выбрал для отображения (google_ads или social_media, или оба).Это реактивный вектор, который будет вызывать перерисовку сюжета при каждом изменении.Каждый раз, когда это изменяется, фильтруйте фрейм данных, чтобы сохранить только то, что пользователь хочет видеть df %>% filter(source %in% input$z).Еще одна вещь, на которую следует обратить внимание, это раскрасить точки, основываясь на «источнике», вам нужно использовать aes(color = source), а не aes_string, потому что вы не хотите оценивать источник как переменную.

Не забудьте установить и загрузитьбиблиотека (tidyverse), ggplot2 также является частью tidyverse, поэтому вы можете заменить library(ggplot2) на library(tidyverse).Если вы действительно не хотите использовать tidyverse, просто используйте df[df$source %in% input$z, ] для фильтрации данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...