r - 在 qqplot 和 Shiny 中命名图例

标签 r ggplot2 shiny

我正在尝试命名 Shiny 中 ggplot 的传说。问题是,由于用户可以关闭和打开各行,因此每行的名称都会更改,因此图例的名字与第一个可见行相关联。

我需要一种方法来重命名传奇。

数据:

data_raw <- structure(list(Group.1 = structure(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", "2016-10-01", "2016-11-01", "2016-12-01", "2017-01-01"), class = "factor"), Group.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", "45232")), .Names = c("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 下的选择列表中的正确名称,但我需要能够重命名它。

最佳答案

我修改了你的服务器功能:

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) 

最后,我修改了 ggplot 以使用 aes_string (因为 data.frame 中有一个名为 x 的变量),并使用 guide =guide_legend(title =“Postnr”)drop = FALSE 确保颜色一致(因为未删除未使用的因子级别)。

如果没有选中任何复选框,您将收到错误,因此您需要在生成绘图之前检查您的 grouped_data data.frame 是否至少有 1 行。如果nrow(grouped_data) == 0则返回NULL(无图)。

关于r - 在 qqplot 和 Shiny 中命名图例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42734590/

相关文章:

r - 将 Shiny 应用程序中的所有用户输入导出到文件并稍后加载

r - 如何使用 Shiny 的输入来过滤已编辑的数据表?

r - 使用 ggplot2 进行逻辑回归 + 直方图

r - grid.Call 错误

r - 如何在 ggplot2 中创建 "progress bar"类型的图表来显示一个人所在的百分位数?

r - 将函数应用于所有行(或列)对的有效方法

mysql - 通过单击输入文本框从 R Shiny 运行 SQL 查询

r - 如何在R中创建斜率场?

R - 如何删除轴与其标题之间的空间?

r - 累计计算不同年份的不同用户总数