在r中具有多个y轴变量的图

时间:2019-03-14 06:03:44

标签: r shiny

我具有以下数据结构 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 个答案:

答案 0 :(得分:1)

我从上述答案中提取了样本数据集。

  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

答案 1 :(得分:0)

由于未提供实际数据(无法复制图像),因此我使用了示例数据进行解释。您需要使用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