2017-03-11 31 views
2

我想命名閃亮ggplot的傳說。問題在於,由於用戶可以關閉並在行上每行的名稱更改,圖例的名字與第一個可見行相關聯。在qqplot和Shiny中命名傳奇

我需要一種方法來重命名傳奇。

數據:

data_raw < - 結構(列表(Group.1 =結構(C(1L,2L,3L,4L,5L,6L,7L,1L,2L,3L,4L, 5L,7L,1L,2L,3L,4L,5L,6L,7L), .Label = c(「2016-07-01」,「2016-08-01」,「2016-09-01」,「組2 = c(101,101, 101,101,101,101,101,103,103,103,103,103,103,105,105,105,105,105,105,105), x = c(「57976」,「42933」, 「49731」「46808」「48938」「41937」「41932」「48900」「37625」「57700」「41700」「57600」「48800」「46102」「35796」 「,」42490「,」46755「,」46757「,」46810「,」 (「Group.1」,「Group.2」,「x」), row.names = c(NA,20L),class =「data.frame」)

代碼:

library(shiny) 
library(ggplot2) 

ui <- fluidPage(

    titlePanel("Legends"), 

    sidebarLayout(position = "left", 
        sidebarPanel(checkboxGroupInput("checkGroup", 
                label = h3("Postnumber"), 
                choices = list( 
                  "101" = 101, 
                  "103" = 103, 
                  "105" = 105), 
                selected = "101" 
               )), 
      mainPanel("main panel", 
        plotOutput('myplot')) 
    )) 

server <- function(input, output) { 

    output$myplot <- renderPlot({ 

    grouped_data <- data_raw[data_raw$Group.2 %in% input$checkGroup,] 

    p <- ggplot(grouped_data, aes(Group.1, x, group = Group.2)) + 
      scale_colour_manual(values=c("#999999", "#E69F00", "#56B4E9"), 
           labels=c("postnr 101", "postnr 103", "postnr 105")) 
    p + geom_line() + 
      theme(axis.title.y=element_text(margin=margin(0,20,0,0))) + 
      geom_line(data = grouped_data, aes(colour = factor(Group.2))) 

}) 
    } 
shinyApp(ui = ui, server = server) # this launches your app 

我如果離開傳說爲是(沒有任何重命名),它使用從checkboxGroupInput下選擇列表中正確的名稱,但我需要重新命名它的能力。

回答

1

我已經修改了你的服務器功能:使用

server <- function(input, output) { 
    output$myplot <- renderPlot({ 

    grouped_data <- data_raw[data_raw$Group.2 %in% input$checkGroup,] 

    grouped_data$Group.2 <- paste("postnr ", grouped_data$Group.2, sep = "") 

    grouped_data$Group.2 <- factor(grouped_data$Group.2, 
            levels = c("postnr 101", "postnr 103", "postnr 105"), 
            ordered = TRUE) 

    ggplot(grouped_data, 
       aes_string(x = "Group.1", y = "x", group = "Group.2", 
          colour = "Group.2")) + 
     geom_line() + 
     scale_colour_manual(values=c("#999999", "#E69F00", "#56B4E9"), 
          guide = guide_legend(title = "Postnr"), drop = FALSE) + 
     theme(axis.title.y=element_text(margin=margin(0,20,0,0))) 

    }) } 

標籤項(101,103,105)被重命名(爲 「postnr 101」 等):

grouped_data$Group.2 <- paste("postnr ", grouped_data$Group.2, sep = "") 

然後將它們轉換到有序因子(使每一個項目,如 「postnr 101」 總是得到相同的顏色):

grouped_data$Group.2 <- factor(grouped_data$Group.2, 
            levels = c("postnr 101", "postnr 103", "postnr 105"), 
            ordered = TRUE) 

最後,I H ave修改了ggplot以使用aes_string(因爲data.frame中有一個名爲x的變量),並使用guide = guide_legend(title = "Postnr")爲圖例賦予了標題。 drop = FALSE確保顏色一致(因爲未使用的因子水平不會丟失)。

如果未選中任何複選框,將會出現錯誤,因此您需要檢查grouped_data data.frame在生成圖表之前是否至少有一行。如果nrow(grouped_data) == 0然後返回NULL(無情節)。

+0

Brillant,謝謝。 簡單的解決方案和一些我不知道的新事物:D – Atius