ggplot in shiny:geom_line(aes(color = variable)),当变量只是一个因子时失败

时间:2016-12-14 16:48:17

标签: r ggplot2 shiny

在闪亮的我已经建立了一个应用程序,将各种价格数据绘制成图表。我正在密谋:

  • x轴=日期

  • y轴=价格

  • color = variable(在这种情况下,交易模型和型号名称为
    在使用melt()
  • 后,在一个名为变量的列中侦听

我在ui中有一个selectInput框,通过过滤ccy2.price.melt过滤掉用户不想使用的模型。

一切都很完美,直到我只留下一个模型展示。然后出现以下错误:

  

错误:维数不正确

我假设它与:

  

aes(color = variable)

是否可以解决这个问题,以便在仅绘制一个模型时可以使用此代码绘制所需的图表?

model.fixed.colours <- reactive ({ cbind(c("unhedged", "custom", "hedged", "quant"), c(input$unhedged.colour, input$custom.colour, input$hedged.colour, input$quant.colour)) })


ccy2.models.price <- reactive({


    models <- c()

    if("Unhedged" %in% input$models.for.price.chart) {
            models <- append(models, "unhedged")
    }
    if("Custom" %in% input$models.for.price.chart) {
            models <- append(models, "custom")
    }
    if("Hedged" %in% input$models.for.price.chart) {
            models <- append(models, "hedged")
    }
    if("QUANT" %in% input$models.for.price.chart)   {
            models <- append(models, "quant")
    }

    models

})

output$ccy2.price <- renderPlot ({

    values <- ccy2.price.melt()[ccy2.price.melt()$variable %in% ccy2.models.price(),]
    colour <- model.fixed.colours()[model.fixed.colours()[,1] %in% ccy2.models.price(),]

    ggplot(values, aes(x = date, y = value)) + 
            geom_line(aes(colour = variable), size = 1) +
            theme_bw() +
            scale_color_manual(values = colour[,2]) +
            labs(colour = "") +
            xlab("Date") + 
            ggtitle(paste("Average ", input$ccy2, "/", input$base.ccy, " FX Rate ", sep = "" )) +
            theme(plot.title = element_text(size=20, face="bold", margin = margin(10, 0, 10, 0))) +
            theme(panel.border = element_blank()) +
            theme(axis.line.x = element_line(color="black", size = 0.5), axis.line.y = element_line(color="black", size = 0.5)) +
            theme(legend.key = element_rect(fill = NULL, color = "white")) +
            guides(colour = guide_legend(override.aes = list(size=4))) +

            scale_y_continuous("FX Rate", limits = c(min.ccy2.price(),max.ccy2.price()))

})

1 个答案:

答案 0 :(得分:0)

它与行scale_colour_manual(values = colour[,2])

有关

当你只有一个变量时,这是一个向量而不是一个矩阵,因此当你要求[,2]时,你要求的是一个1暗淡对象的第二维中的东西。尝试将其设为data.frame而不是矩阵。

model.fixed.colours <- reactive ({
 data.frame(Name = c("unhedged", "custom", "hedged", "quant"),
  Colour = c(input$unhedged.colour, input$custom.colour, input$hedged.colour, input$quant.colour)) 
})

然后用

替换该行
scale_color_manual(values = colour$Colour) +

colour <- subset(model.fixed.colours(),Name  %in% ccy2.models.price())