我正在尝试命名 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/