2016-12-14 101 views
0

閃亮我已經構建了一個將各種價格數據繪製成圖表的應用程序。我策劃這樣的:ggplot in shiny:geom_line(aes(color = variable)),當變量只有一個因子時失敗

  • x軸=日期

  • y軸=價格

  • 顏色=變量(在這種情況下,交易模式和型號名稱是
    在聽列名爲變量後,我用melt()

我在ui中有一個selectInput框中篩選出模型,用戶不想使用fil發生在ccy2.price.melt

一切正常,直到我只留下1個模型顯示。那麼下面的錯誤大吵起來:

Error: incorrect number of dimensions

我假設它是要做到:

aes(colour = 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())) 

})

+0

使用'瀏覽器()''你裏面renderPlot({...})'採取仔細看看在這一點上你的價值和顏色實際上是什麼樣子。 (你將不得不跳過瀏覽器()幾次,直到你的輸入設置爲重現錯誤) –

回答

0

它與線​​

做當只有一個變量這是一個矢量,而不是一個矩陣,從而當你要求[,2]時,你要求的是一個1 dim對象的第二維中的東西。嘗試將此設置爲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()) 
+0

如果我按原樣運行並且我認爲它是因爲:「scale_color_manual(values = color $ color)+「。如果將其更改爲彩色$ Color圖表顯示,但它忽略了我的顏色選擇。我已經有一個遊戲,不能爲我的生活工作 – lordf

+0

我不能用你提供的代碼重現你的錯誤。我建議使用'browser()'函數來查看。它會暫停閃亮的執行,並在該環境中給你一個命令行。然後,您可以仔細看看變量實際具有的值。 (你是對的,我有一個大寫錯別字,應該是'Colour') –

+0

好吧,我終於搞定了。 model.fixed.colours變量中的輸入是十六進制。在轉換爲數據框時,我認爲這些字符格式丟失了怎麼樣?通過任何方式進行這種修改它都可以正常工作:scale_color_manual(values = as.character(color $ Color))+ – lordf

相關問題