График графика с несколькими переменными оси Y в - PullRequest
0 голосов
/ 14 марта 2019

У меня есть следующая структура данных enter image description here Я построил график даты (ось x) против TypeA / TypeB /….
Как я могу построить дату (ось x) против несколькихТипы (например, TypeA, TypeB - 2 строки. По одной для каждого).

Используемый в настоящее время код:

output$trendPlot1 <- renderPlotly({
    dataset1 <- reactive({
      data3[sample(nrow(data3) , 100 ),]
    })
    p <- ggplot(dataset1(), aes_string(x = "Date", y = input$y )) +
       ggtitle(paste0("Simple Cumulative Return of Stock over Time")) +
      # geom_point()
      geom_line()
    ggplotly(p) %>% 
      layout( autosize=TRUE)
  })

y (раскрывающийся список с разными типами) вводится пользователем на экране. У меня будет раскрывающийся список с несколькими вариантами выбора, и он сможетвыбрать разные типы.(в реальных данных около 100 типов).Я хочу отобразить только те типы, которые выбраны пользователем, а не остальные.
Как передать несколько вариантов выбора на график, который будет нанесен на один график?

Ответы [ 2 ]

1 голос
/ 14 марта 2019

Я взял образец набора данных из приведенного выше ответа.

  1. Преобразование данных из широкоформатного формата в длинный, чтобы можно было фильтровать тип.
  2. Используйте это для подмножества данных при ggplotting на сервере
library(shiny)
library(tidyverse)

Date <- c("29-Oct-2018", "28-Oct-2018", "27-Oct-2018", "26-Oct-2018")
TypeA <- rnorm(4, 5, 2)
TypeB <- rnorm(4, 5, 3)
TypeC <- rnorm(4, 5, 4)
df <- data.frame(Date = Date, TypeA = TypeA, TypeB = TypeB, TypeC = TypeC)

wide_df <- df %>% gather(Type,Value,2:4)


ui <- fluidPage(


  selectInput(inputId = "type",
              label = "",
              choices = unique(wide_df$Type),
              multiple = TRUE),

  plotOutput("first_plot")

)

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

  output$first_plot <- renderPlot({

    wide_df %>% 
      filter(Type %in% input$type) %>% 
    ggplot() +
      geom_point(aes(Date, Value, color = Type))

  })




}

shinyApp(ui, server)

enter image description here

0 голосов
/ 14 марта 2019

Поскольку фактические данные не были предоставлены (изображение не может быть воспроизведено), я использовал пример данных для объяснения. Вам необходимо преобразовать данные в график для длинного формата, используя melt из пакета reshape2. Пример кода приведен ниже. Выполните необходимые изменения.

library(ggplot2)
library(reshape2)

Date <- c("29-Oct-2018", "28-Oct-2018", "27-Oct-2018", "26-Oct-2018")
TypeA <- rnorm(4, 5, 2)
TypeB <- rnorm(4, 5, 3)
TypeC <- rnorm(4, 5, 4)
df <- data.frame(Date = Date, TypeA = TypeA, TypeB = TypeB, TypeC = TypeC)

plotdf <- melt(df, id.vars = "Date")
print(ggplot(plotdf, aes(value, Date, colour = variable)) + geom_point() + 
        ggtitle(paste0("Simple Cumulative Return of Stock over Time")) +
        theme(legend.position = "bottom")+
        guides(fill = guide_legend(reverse=TRUE)))

Выход:

enter image description here

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