在这种情况下如何为多个表打印 ggplot? [英] How to print ggplot for multiple tables in this case?
问题描述
我有这个代码可以打印多个表格
库(tidyverse)图书馆(dplyr)图书馆(咕噜咕噜)u<-c(D"、B"、C"、A")l<- list(`0` = 结构(list(X70 = D", X71 = C", X72 = C", X73 = A", X74 = B", X75 =C", X76 = D", X77 = NA_character_, X78 = B", X79 = D", X80 = C", Q = 1), row.names = 32L, class =data.frame"),1"=结构(list(X70 = c(D",B",D",D",B",D",D"、D"、D"、D"、D")、X71 = c(B"、B"、C"、C"、C"、NA、D"、B"、C"、A"、C")、X72 = c(A"、A"、C";, B", C", C", C", C", D", B", NA), X73 = c(B", ";C"、C"、B"、C"、D"、A"、B"、C"、C"、NA), X74 = c(B"、A"、C"、D"、B"、D"、NA、D"、D"、";D", NA), X75 = c(C"、C"、B"、C"、D"、D"、C"、A", C", C", C"), X76 = c(D", A", D", B", D", C";, D", A", A", D", B"), X77 = c(D", C", B", B";, B", C", B", B", B", B", D"), X78 = c(B", C";、C"、B"、A"、A"、C"、B"、A"、C"、NA),X79 = c("C"、C"、NA、NA、D"、A"、A"、A"、D"、A"、D"),X80 =c(B"、A"、NA、NA、B"、C"、B"、NA、B"、C"、A")、Q= c(2, 2, 1, 1, 2, 2, 1, 1, 4, 3, 1)), row.names = c(8L, 10L, 12L, 17L, 25L, 27L, 28L, 33L, 35L, 38L, 45L), class = data.frame"), `2` = structure(list(X70 = c(D", D", D", B", B")D", C", D", D", D", D", D", D"), X71 = c(A", D")B"、C"、C"、A"、A"、C"、B"、C"、C"、D"、D"B"),X72 = c(D",C",D",A",A",C",D",C",NA,D"、C"、B")、X73 = c(B"、D"、D"、C"、B"、D"、D"、D"、NA、NA、C""、A")、X74 = c(D"、C"、B"、D"、C"、B"、C"、C"C"、B"、NA、C"、D")、X75 = c(B"、C"、C"、C"、NA、C";, B", C", C", C", B", C"), X76 = c(A", D", D";, D", NA, D", D", A", D", D", D", D"), X77 = c(";B"、B"、D"、B"、NA、B"、D"、B"、B"、B"、B",B"), X78 = c(C",D",C",B",NA,D",C",C",C"B"、D"、C"、NA)、X79 = c(A"、D"、D"、D"、NA、D"、A"t;, NA, A", D", B", NA), X80 = c(NA, C", C", A", NA, C", C", NA, B", C", C", NA), Q = c(2, 3, 3, 1, 3, 1, 2, 2, 1, 2,2, 1)), row.names = c(4L, 5L, 6L, 11L, 15L, 16L, 21L, 22L, 26L, 37L, 39L, 43L), class = "data.frame"), `3`=结构(列表(X70 = c(A",A",D",C",D",D",D",D",NA), D", D", D"), X71 = c(B", C", D", D", C", C";、B"、C"、C"、C"、A"、D")、X72 = c(B"、C"、NA、"B"、A"、C"、B"、A"、C"、C"、D"、B"),X73 = c(NA,C"、C"、A"、D"、C"ot;, A", A", D", B", D", B"), X74 = c(NA, C", D",B"、A"、D"、NA、D"、B"、A"、D"、A")、X75 = c(NA、"C"、B"、D"、C"、C"、C"、C"、C"、B"、C"、";D"), X76 = c(NA, "D", "A", "B", "A", "D", "D", "D", "D";, D", D", D"), X77 = c(NA, B", B", B", C", B", B"A"、B"、NA、C"、D"、D")、X78 = c(NA、C"、C"、B"、C";, B", A", C", D", C", C", C"), X79 = c(NA, D", ";D", NA, B", D", A", D", A", D", D", A"), X80 = c(NA、C"、C"、NA"、D"、C"、C"、C"、C"、C"、B"、";C"), Q = c(2, 2, 2, 2, 4, 2, 4, 4, 4, 3, 3, 2)), row.names = c(2L, 13L, 14L, 18L, 19L, 20L, 29L, 30L, 34L, 36L, 41L, 44L), class = "data.frame"), `4` = structure(list(X70 = c("D", "D", "D"、D"、D"、D"、D"、D"、D"、D"、D"、D")、X71= c(A"、NA、A"、B"、C"、A"、A"、C"、B"、C"、C"、C")、X72 = c(B"、C"、C"、C"、NA、C"、B"、A";、C"、B"、NA、A";), X73 = c(NA, D", D", D", B", D", D", D", C", C";A"、A"、C")、X74 = c(C"、A"、C"、D"、C"、C"、";A"、A"、C"、D"、D"、D")、X75 = c(C"、C"、C"、";C", "C", "C", "C", "C", "C", "D", "C", "C"), X76 = c("D"、D"、D"、D"、D"、D"、D"、D"、A"、D"、";D", "A"), X77 = c(NA, "B", "D", "B", NA, "B", "B", "B", "B"C"、D"、NA、C")、X78 = c(C"、C"、C"、C"、A"、A";, C", A", C", C", C", C"), X79 = c(D", D", A";、D"、D"、A"、D"、D"、A"、D"、C"、C"),X80 =c(C"、C"、C"、C"、NA、C"、C"、C"、C"、C"、";C", "A"), Q = c(2, 4, 4, 3, 2, 4, 2, 4, 1, 1, 2, 4)), row.names = c(1L, 3L,7L, 9L, 23L, 24L, 31L, 40L, 42L, 46L, 47L, 48L), class = data.frame"))out <- lapply(l, function(dat)asplit(as.data.frame(t(sapply(dat, function(x))比例(表(因子(unlist(x),水平= u)))))),1))%>%转置%>%地图(绑定行,.id = 'grp')出去
我想使用 ggplot 打印每个表格,因为它看起来非常漂亮,而且每行末尾还有 A、B、C、D.这是一个示例代码,它为 one 表打印 ggplot.我想为上面的 out 打印的每个表格打印这种类型的表格.
图书馆(tidyverse)d = 结构(c(0.129310344827586, 0.258620689655172, 0.318965517241379,0.293103448275862, 0.12972972972973, 0.210810810810811, 0.345945945945946,0.313513513513514, 0.0845070422535211, 0.154929577464789, 0.338028169014085,0.422535211267606, 0.226415094339623, 0.0943396226415094, 0.367924528301887,0.311320754716981), .Dim = c(4L, 4L), .Dimnames = list(c(A", B", C", D"), c(1", D")2"、3"、4")))d=d%>%数据帧%>%rownames_to_column(var = "Groups") %>%pivot_longer(cols = 2:5) %>%group_by(组)%>%变异(名称 = 子(X",",名称)%>% as.numeric(), n = 1:n())ggplot(数据= d)+geom_path(aes(x = name, y = value, group = factor(Groups), color = factor(Groups)), size = 0.7) +geom_point(aes(x = name, y = value, color = factor(Groups)), size = 2) +geom_text(data = d %>% filter(n == max(n)), aes(x = name, y = value, label = Groups, color = factor(Groups)), nudge_x = 0.2) +实验室(x = 组",y = P")+theme_bw() +主题(legend.position =无")
有关更多信息,请查看以下内容.这里@akrun 使用 matplot 为每个图绘制了一个图:查找每个字符(A、B、C、D)在具有 3 个数据集的列表的每一列中出现的次数的比例
Andy 的代码在控制台中完美运行!但是,我原本想在一个闪亮的应用程序中运行它,但它给出了这个错误:
<块引用>`.x` 必须是一个向量,而不是一个 `reactiveExpr/reactive/function` 对象
库(dplyr)图书馆(整理)图书馆(咕噜咕噜)图书馆(ggplot2)ui<-shinyUI(fluidPage(titlePanel(title = h4("proportion graphs", align="center")), sidebarLayout( sidebarPanel( ),主面板(# 创建一个 uiOutputuiOutput(绘图")))))服务器<-闪亮的服务器(功能(输入,输出){#1 数据集 ll<-反应性({f<- list(`0` = 结构(list(X70 = D", X71 = C", X72 = C", X73 = A", X74 = B", X75 =C", X76 = D", X77 = NA_character_, X78 = B", X79 = D", X80 = C", Q = 1), row.names = 32L, class =data.frame"),1"=结构(list(X70 = c(D",B",D",D",B",D",D"、D"、D"、D"、D")、X71 = c(B"、B"、C"、C"、C"、NA、D"、B"、C"、A"、C")、X72 = c(A"、A"、C";, B", C", C", C", C", D", B", NA), X73 = c(B", ";C"、C"、B"、C"、D"、A"、B"、C"、C"、NA), X74 = c(B"、A"、C"、D"、B"、D"、NA、D"、D"、";D", NA), X75 = c(C"、C"、B"、C"、D"、D"、C"、A", C", C", C"), X76 = c(D", A", D", B", D", C";, D", A", A", D", B"), X77 = c(D", C", B", B";, B", C", B", B", B", B", D"), X78 = c(B", C";、C"、B"、A"、A"、C"、B"、A"、C"、NA),X79 = c("C"、C"、NA、NA、D"、A"、A"、A"、D"、A"、D"),X80 =c(B"、A"、NA、NA、B"、C"、B"、NA、B"、C"、A")、Q= c(2, 2, 1, 1, 2, 2, 1, 1, 4, 3, 1)), row.names = c(8L, 10L, 12L, 17L, 25L, 27L, 28L, 33L, 35L, 38L, 45L), class = data.frame"), `2` = structure(list(X70 = c(D", D", D", B", B")D", C", D", D", D", D", D", D"), X71 = c(A", D")B"、C"、C"、A"、A"、C"、B"、C"、C"、D"、D"B"),X72 = c(D",C",D",A",A",C",D",C",NA,D"、C"、B")、X73 = c(B"、D"、D"、C"、B"、D"、D"、D"、NA、NA、C""、A")、X74 = c(D"、C"、B"、D"、C"、B"、C"、C"C"、B"、NA、C"、D")、X75 = c(B"、C"、C"、C"、NA、C";, B", C", C", C", B", C"), X76 = c(A", D", D";, D", NA, D", D", A", D", D", D", D"), X77 = c(";B"、B"、D"、B"、NA、B"、D"、B"、B"、B"、B",B"), X78 = c(C",D",C",B",NA,D",C",C",C"B"、D"、C"、NA)、X79 = c(A"、D"、D"、D"、NA、D"、A"t;, NA, A", D", B", NA), X80 = c(NA, C", C", A", NA, C", C", NA, B", C", C", NA), Q = c(2, 3, 3, 1, 3, 1, 2, 2, 1, 2,2, 1)), row.names = c(4L, 5L, 6L, 11L, 15L, 16L, 21L, 22L, 26L, 37L, 39L, 43L), class = "data.frame"), `3`= 结构(列表(X70 = c(A"、A"、D"、C"、D"、D"、D"、D"、NA), D", D", D"), X71 = c(B", C", D", D", C", C";、B"、C"、C"、C"、A"、D")、X72 = c(B"、C"、NA、"B"、A"、C"、B"、A"、C"、C"、D"、B"),X73 = c(NA,C"、C"、A"、D"、C"ot;, A", A", D", B", D", B"), X74 = c(NA, C", D",B"、A"、D"、NA、D"、B"、A"、D"、A")、X75 = c(NA、"C"、B"、D"、C"、C"、C"、C"、C"、B"、C"、";D"), X76 = c(NA, "D", "A", "B", "A", "D", "D", "D", "D";, D", D", D"), X77 = c(NA, B", B", B", C", B", B"A"、B"、NA、C"、D"、D")、X78 = c(NA、C"、C"、B"、C";, B", A", C", D", C", C", C"), X79 = c(NA, D", ";D", NA, B", D", A", D", A", D", D", A"), X80 = c(NA、C"、C"、NA"、D"、C"、C"、C"、C"、C"、B"、";C"), Q = c(2, 2, 2, 2, 4, 2, 4, 4, 4, 3, 3, 2)), row.names = c(2L, 13L, 14L, 18L, 19L, 20L, 29L, 30L, 34L, 36L, 41L, 44L), class = "data.frame"), `4` = structure(list(X70 = c("D", "D", "D"、D"、D"、D"、D"、D"、D"、D"、D"、D")、X71= c(A"、NA、A"、B"、C"、A"、A"、C"、B"、C"、C"、C")、X72 = c(B"、C"、C"、C"、NA、C"、B"、A";、C"、B"、NA、A";), X73 = c(NA, D", D", D", B", D", D", D", C", C";A"、A"、C")、X74 = c(C"、A"、C"、D"、C"、C"、";A"、A"、C"、D"、D"、D")、X75 = c(C"、C"、C"、";C", "C", "C", "C", "C", "C", "D", "C", "C"), X76 = c("D"、D"、D"、D"、D"、D"、D"、D"、A"、D"、";D"、A")、X77 = c(NA、B"、D"、B"、NA、B"、B"、B"、B"C"、D"、NA、C")、X78 = c(C"、C"、C"、C"、A"、A";, C", A", C", C", C", C"), X79 = c(D", D", A";、D"、D"、A"、D"、D"、A"、D"、C"、C"),X80 =c(C"、C"、C"、C"、NA、C"、C"、C"、C"、C"、";C", "A"), Q = c(2, 4, 4, 3, 2, 4, 2, 4, 1, 1, 2, 4)), row.names = c(1L, 3L,7L, 9L, 23L, 24L, 31L, 40L, 42L, 46L, 47L, 48L), class = "data.frame")) })#2 向量 uu <- 反应性({u <- c(D"、B"、C"、A")})#3 处理数据的反应式表达式输出 <- 反应性({l <- l()u <- u()lapply(l,功能(数据)asplit(as.data.frame(t(sapply(dat, function(x))比例(表(因子(unlist(x),水平= u)))))),1))%>%转置%>%地图(绑定行,.id = 'grp')})#4 渲染图输出$plots <- renderUI({绘图 <- 函数(x){d=x%>%as.data.frame() %>%tidyr::pivot_longer(!grp) %>%dplyr::group_by(name) %>%dplyr::mutate(n = 1:n())ggplot(数据= d)+geom_path(aes(x = grp, y = value, group = factor(name), color = factor(name)), size = 0.7) +geom_point(aes(x = grp, y = value, color = factor(name)), size = 2) +geom_text(data = d %>% filter(n == max(n)), aes(x = grp, y = value, label = name, color = factor(name)), nudge_x = 0.2) +实验室(x = 组",y = P",标题 = ")+theme_bw() +主题(legend.position =无")}plot_objects <- purrr::map(out, plots)})})闪亮应用程序(用户界面,服务器)
所以,这是使用 purrr::map
的好机会.通过将代码应用于一个数据帧,您已经成功了一半.
你可以把上面写的代码放到一个函数中.
库(dplyr)图书馆(整理)图书馆(咕噜咕噜)图书馆(ggplot2)绘图 <- 函数(x){d=x%>%as.data.frame() %>%tidyr::pivot_longer(!grp) %>%dplyr::group_by(name) %>%dplyr::mutate(n = 1:n())ggplot(数据= d)+geom_path(aes(x = grp, y = value, group = factor(name), color = factor(name)), size = 0.7) +geom_point(aes(x = grp, y = value, color = factor(name)), size = 2) +geom_text(data = d %>% filter(n == max(n)), aes(x = grp, y = value, label = name, color = factor(name)), nudge_x = 0.2) +实验室(x = 组",y = P",标题 = ")+theme_bw() +主题(legend.position =无")}
然后,在您的 out
列表中使用 purrr::map
.这将返回您可以绘制的 ggplot 对象列表.
plot_objects <- purrr::map(out, plots)
最后,如果您希望将它们全部显示在一个页面上,例如您提供的链接,那么您可以执行以下操作:
库(ggpubr)ggpubr::ggarrange(plotlist = plot_objects,ncol = 3,行 = 4,标签 = 名称(plot_objects),hjust = -5,vjust = 2)
I have this code which prints multiple tables
library(tidyverse)
library(dplyr)
library(purrr)
u<- c("D", "B", "C", "A")
l<- list(`0` = structure(list(X70 = "D", X71 = "C", X72 = "C", X73 = "A", X74 = "B", X75 = "C", X76 = "D", X77 = NA_character_, X78 = "B", X79 = "D", X80 = "C", Q = 1), row.names = 32L, class = "data.frame"), `1` = structure(list(X70 = c("D", "B", "D", "D", "B", "D", "D", "D", "D", "D", "D"), X71 = c("B", "B", "C", "C", "C", NA, "D", "B", "C", "A", "C"), X72 = c("A", "A", "C", "B", "C", "C", "C", "C", "D", "B", NA), X73 = c("B", "C", "C", "B", "C", "D", "A", "B", "C", "C", NA), X74 = c("B", "A", "C", "D", "B", "D", NA, "D", "D", "D", NA), X75 = c("C", "C", "B", "C", "D", "D", "C", "A", "C", "C", "C"), X76 = c("D", "A", "D", "B", "D", "C", "D", "A", "A", "D", "B"), X77 = c("D", "C", "B", "B", "B", "C", "B", "B", "B", "B", "D"), X78 = c("B", "C", "C", "B", "A", "A", "C", "B", "A", "C", NA), X79 = c("C", "C", NA, NA, "D", "A", "A", "A", "D", "A", "D"), X80 = c("B", "A", NA, NA, "B", "C", "B", NA, "B", "C", "A"), Q = c(2, 2, 1, 1, 2, 2, 1, 1, 4, 3, 1)), row.names = c(8L, 10L, 12L, 17L, 25L, 27L, 28L, 33L, 35L, 38L, 45L), class = "data.frame"), `2` = structure(list(X70 = c("D", "D", "D", "B", "D", "C", "D", "D", "D", "D", "D", "D"), X71 = c("A", "B", "C", "C", "A", "A", "C", "B", "C", "C", "D", "B"), X72 = c("D", "C", "D", "A", "A", "C", "D", "C", NA, "D", "C", "B"), X73 = c("B", "D", "D", "C", "B", "D", "D", "D", NA, NA, "C", "A"), X74 = c("D", "C", "B", "D", "C", "B", "C", "C", "B", NA, "C", "D"), X75 = c("B", "C", "C", "C", NA, "C", "B", "C", "C", "C", "B", "C"), X76 = c("A", "D", "D", "D", NA, "D", "D", "A", "D", "D", "D", "D"), X77 = c("B", "B", "D", "B", NA, "B", "D", "B", "B", "B", "B", "B"), X78 = c("C", "D", "C", "B", NA, "D", "C", "C", "B", "D", "C", NA), X79 = c("A", "D", "D", "D", NA, "D", "A", NA, "A", "D", "B", NA), X80 = c(NA, "C", "C", "A", NA, "C", "C", NA, "B", "C", "C", NA), Q = c(2, 3, 3, 1, 3, 1, 2, 2, 1, 2, 2, 1)), row.names = c(4L, 5L, 6L, 11L, 15L, 16L, 21L, 22L, 26L, 37L, 39L, 43L), class = "data.frame"), `3` = structure(list(X70 = c("A", "A", "D", "C", "D", "D", "D", "D", NA, "D", "D", "D"), X71 = c("B", "C", "D", "D", "C", "C", "B", "C", "C", "C", "A", "D"), X72 = c("B", "C", NA, "B", "A", "C", "B", "A", "C", "C", "D", "B"), X73 = c(NA, "C", "C", "A", "D", "C", "A", "A", "D", "B", "D", "B"), X74 = c(NA, "C", "D", "B", "A", "D", NA, "D", "B", "A", "D", "A"), X75 = c(NA, "C", "B", "D", "C", "C", "C", "C", "C", "B", "C", "D"), X76 = c(NA, "D", "A", "B", "A", "D", "D", "D", "D", "D", "D", "D"), X77 = c(NA, "B", "B", "B", "C", "B", "A", "B", NA, "C", "D", "D"), X78 = c(NA, "C", "C", "B", "C", "B", "A", "C", "D", "C", "C", "C"), X79 = c(NA, "D", "D", NA, "B", "D", "A", "D", "A", "D", "D", "A"), X80 = c(NA, "C", "C", NA, "D", "C", "C", "C", "C", "C", "B", "C"), Q = c(2, 2, 2, 2, 4, 2, 4, 4, 4, 3, 3, 2)), row.names = c(2L, 13L, 14L, 18L, 19L, 20L, 29L, 30L, 34L, 36L, 41L, 44L), class = "data.frame"), `4` = structure(list(X70 = c("D", "D", "D", "D", "D", "D", "D", "D", "D", "D", "D", "D"), X71 = c("A", NA, "A", "B", "C", "A", "A", "C", "B", "C", "C", "C"), X72 = c("B", "C", "C", "C", NA, "C", "B", "A", "C", "B", NA, "A"), X73 = c(NA, "D", "D", "D", "B", "D", "D", "D", "C", "A", "A", "C"), X74 = c("C", "A", "C", "D", "C", "C", "A", "A", "C", "D", "D", "D"), X75 = c("C", "C", "C", "C", "C", "C", "C", "C", "C", "D", "C", "C"), X76 = c("D", "D", "D", "D", "D", "D", "D", "D", "A", "D", "D", "A"), X77 = c(NA, "B", "D", "B", NA, "B", "B", "B", "C", "D", NA, "C"), X78 = c("C", "C", "C", "C", "A", "A", "C", "A", "C", "C", "C", "C"), X79 = c("D", "D", "A", "D", "D", "A", "D", "D", "A", "D", "C", "C"), X80 = c("C", "C", "C", "C", NA, "C", "C", "C", "C", "C", "C", "A"), Q = c(2, 4, 4, 3, 2, 4, 2, 4, 1, 1, 2, 4)), row.names = c(1L, 3L, 7L, 9L, 23L, 24L, 31L, 40L, 42L, 46L, 47L, 48L), class = "data.frame"))
out <- lapply(l, function(dat)
asplit(as.data.frame(t(sapply(dat, function(x)
proportions(table(factor(unlist(x), levels = u)))))), 1) ) %>%
transpose %>%
map(bind_rows, .id = 'grp')
out
I want to print using ggplot for each table because it looks very beautiful and also has A,B,C,D at the end of each line. Here is an example code which prints a ggplot for one table. I want to print this type of table for each table print by out above.
library(tidyverse)
d = structure(c(0.129310344827586, 0.258620689655172, 0.318965517241379,
0.293103448275862, 0.12972972972973, 0.210810810810811, 0.345945945945946,
0.313513513513514, 0.0845070422535211, 0.154929577464789, 0.338028169014085,
0.422535211267606, 0.226415094339623, 0.0943396226415094, 0.367924528301887,
0.311320754716981), .Dim = c(4L, 4L), .Dimnames = list(c("A", "B", "C", "D"), c("1", "2", "3", "4")))
d = d %>%
data.frame %>%
rownames_to_column(var = "Groups") %>%
pivot_longer(cols = 2:5) %>%
group_by(Groups) %>%
mutate(name = sub("X", "", name) %>% as.numeric(), n = 1:n())
ggplot(data = d) +
geom_path(aes(x = name, y = value, group = factor(Groups), color = factor(Groups)), size = 0.7) +
geom_point(aes(x = name, y = value, color = factor(Groups)), size = 2) +
geom_text(data = d %>% filter(n == max(n)), aes(x = name, y = value, label = Groups, color = factor(Groups)), nudge_x = 0.2) +
labs(x = "Group", y = "P") +
theme_bw() +
theme(legend.position = "none")
For more information check out the following. Here @akrun had made a plot for each graph using matplot: Find proportion of times each character(A,B,C,D) occurs in each column of a list which has 3 datasets
Andy's code works perfectly in the console! However, I originally wanted to run this in a shiny app, but it gives out this error:
`.x` must be a vector, not a `reactiveExpr/reactive/function` object
library(dplyr)
library(tidyr)
library(purrr)
library(ggplot2)
ui<-shinyUI(fluidPage(
titlePanel(title = h4("proportion graphs", align="center")), sidebarLayout( sidebarPanel( ),
mainPanel(
# create a uiOutput
uiOutput("plots")
)
)
))
server<- shinyServer(
function(input, output) {
#1 Dataset l
l<- reactive({
f<- list(`0` = structure(list(X70 = "D", X71 = "C", X72 = "C", X73 = "A", X74 = "B", X75 = "C", X76 = "D", X77 = NA_character_, X78 = "B", X79 = "D", X80 = "C", Q = 1), row.names = 32L, class = "data.frame"), `1` = structure(list(X70 = c("D", "B", "D", "D", "B", "D", "D", "D", "D", "D", "D"), X71 = c("B", "B", "C", "C", "C", NA, "D", "B", "C", "A", "C"), X72 = c("A", "A", "C", "B", "C", "C", "C", "C", "D", "B", NA), X73 = c("B", "C", "C", "B", "C", "D", "A", "B", "C", "C", NA), X74 = c("B", "A", "C", "D", "B", "D", NA, "D", "D", "D", NA), X75 = c("C", "C", "B", "C", "D", "D", "C", "A", "C", "C", "C"), X76 = c("D", "A", "D", "B", "D", "C", "D", "A", "A", "D", "B"), X77 = c("D", "C", "B", "B", "B", "C", "B", "B", "B", "B", "D"), X78 = c("B", "C", "C", "B", "A", "A", "C", "B", "A", "C", NA), X79 = c("C", "C", NA, NA, "D", "A", "A", "A", "D", "A", "D"), X80 = c("B", "A", NA, NA, "B", "C", "B", NA, "B", "C", "A"), Q = c(2, 2, 1, 1, 2, 2, 1, 1, 4, 3, 1)), row.names = c(8L, 10L, 12L, 17L, 25L, 27L, 28L, 33L, 35L, 38L, 45L), class = "data.frame"), `2` = structure(list(X70 = c("D", "D", "D", "B", "D", "C", "D", "D", "D", "D", "D", "D"), X71 = c("A", "B", "C", "C", "A", "A", "C", "B", "C", "C", "D", "B"), X72 = c("D", "C", "D", "A", "A", "C", "D", "C", NA, "D", "C", "B"), X73 = c("B", "D", "D", "C", "B", "D", "D", "D", NA, NA, "C", "A"), X74 = c("D", "C", "B", "D", "C", "B", "C", "C", "B", NA, "C", "D"), X75 = c("B", "C", "C", "C", NA, "C", "B", "C", "C", "C", "B", "C"), X76 = c("A", "D", "D", "D", NA, "D", "D", "A", "D", "D", "D", "D"), X77 = c("B", "B", "D", "B", NA, "B", "D", "B", "B", "B", "B", "B"), X78 = c("C", "D", "C", "B", NA, "D", "C", "C", "B", "D", "C", NA), X79 = c("A", "D", "D", "D", NA, "D", "A", NA, "A", "D", "B", NA), X80 = c(NA, "C", "C", "A", NA, "C", "C", NA, "B", "C", "C", NA), Q = c(2, 3, 3, 1, 3, 1, 2, 2, 1, 2, 2, 1)), row.names = c(4L, 5L, 6L, 11L, 15L, 16L, 21L, 22L, 26L, 37L, 39L, 43L), class = "data.frame"), `3` = structure(list(X70 = c("A", "A", "D", "C", "D", "D", "D", "D", NA, "D", "D", "D"), X71 = c("B", "C", "D", "D", "C", "C", "B", "C", "C", "C", "A", "D"), X72 = c("B", "C", NA, "B", "A", "C", "B", "A", "C", "C", "D", "B"), X73 = c(NA, "C", "C", "A", "D", "C", "A", "A", "D", "B", "D", "B"), X74 = c(NA, "C", "D", "B", "A", "D", NA, "D", "B", "A", "D", "A"), X75 = c(NA, "C", "B", "D", "C", "C", "C", "C", "C", "B", "C", "D"), X76 = c(NA, "D", "A", "B", "A", "D", "D", "D", "D", "D", "D", "D"), X77 = c(NA, "B", "B", "B", "C", "B", "A", "B", NA, "C", "D", "D"), X78 = c(NA, "C", "C", "B", "C", "B", "A", "C", "D", "C", "C", "C"), X79 = c(NA, "D", "D", NA, "B", "D", "A", "D", "A", "D", "D", "A"), X80 = c(NA, "C", "C", NA, "D", "C", "C", "C", "C", "C", "B", "C"), Q = c(2, 2, 2, 2, 4, 2, 4, 4, 4, 3, 3, 2)), row.names = c(2L, 13L, 14L, 18L, 19L, 20L, 29L, 30L, 34L, 36L, 41L, 44L), class = "data.frame"), `4` = structure(list(X70 = c("D", "D", "D", "D", "D", "D", "D", "D", "D", "D", "D", "D"), X71 = c("A", NA, "A", "B", "C", "A", "A", "C", "B", "C", "C", "C"), X72 = c("B", "C", "C", "C", NA, "C", "B", "A", "C", "B", NA, "A"), X73 = c(NA, "D", "D", "D", "B", "D", "D", "D", "C", "A", "A", "C"), X74 = c("C", "A", "C", "D", "C", "C", "A", "A", "C", "D", "D", "D"), X75 = c("C", "C", "C", "C", "C", "C", "C", "C", "C", "D", "C", "C"), X76 = c("D", "D", "D", "D", "D", "D", "D", "D", "A", "D", "D", "A"), X77 = c(NA, "B", "D", "B", NA, "B", "B", "B", "C", "D", NA, "C"), X78 = c("C", "C", "C", "C", "A", "A", "C", "A", "C", "C", "C", "C"), X79 = c("D", "D", "A", "D", "D", "A", "D", "D", "A", "D", "C", "C"), X80 = c("C", "C", "C", "C", NA, "C", "C", "C", "C", "C", "C", "A"), Q = c(2, 4, 4, 3, 2, 4, 2, 4, 1, 1, 2, 4)), row.names = c(1L, 3L, 7L, 9L, 23L, 24L, 31L, 40L, 42L, 46L, 47L, 48L), class = "data.frame")) })
#2 Vector u
u <- reactive({
u <- c("D", "B", "C", "A")
})
#3 reactive expression to process data
out <- reactive({
l <- l()
u <- u()
lapply(l, function(dat)
asplit(as.data.frame(t(sapply(dat, function(x)
proportions(table(factor(unlist(x), levels = u)))))), 1) ) %>%
transpose %>%
map(bind_rows, .id = 'grp')
})
#4 render plots
output$plots <- renderUI({
plots <- function(x){
d = x %>%
as.data.frame() %>%
tidyr::pivot_longer(!grp) %>%
dplyr::group_by(name) %>%
dplyr::mutate(n = 1:n())
ggplot(data = d) +
geom_path(aes(x = grp, y = value, group = factor(name), color = factor(name)), size = 0.7) +
geom_point(aes(x = grp, y = value, color = factor(name)), size = 2) +
geom_text(data = d %>% filter(n == max(n)), aes(x = grp, y = value, label = name, color = factor(name)), nudge_x = 0.2) +
labs(x = "Group", y = "P", title = "") +
theme_bw() +
theme(legend.position = "none")
}
plot_objects <- purrr::map(out, plots)
})
} )
shinyApp(ui,server)
So, this is a good opportunity to use purrr::map
. You are half way there by applying code to one dataframe.
You can take the code that you have written above and put it into a function.
library(dplyr)
library(tidyr)
library(purrr)
library(ggplot2)
plots <- function(x){
d = x %>%
as.data.frame() %>%
tidyr::pivot_longer(!grp) %>%
dplyr::group_by(name) %>%
dplyr::mutate(n = 1:n())
ggplot(data = d) +
geom_path(aes(x = grp, y = value, group = factor(name), color = factor(name)), size = 0.7) +
geom_point(aes(x = grp, y = value, color = factor(name)), size = 2) +
geom_text(data = d %>% filter(n == max(n)), aes(x = grp, y = value, label = name, color = factor(name)), nudge_x = 0.2) +
labs(x = "Group", y = "P", title = "") +
theme_bw() +
theme(legend.position = "none")
}
Then, use purrr::map
, on your out
list. This will return a list of ggplot objects that you can then plot.
plot_objects <- purrr::map(out, plots)
Finally, if you would like to have them all on one page, like in the link you provided, then you could do something like this:
library(ggpubr)
ggpubr::ggarrange(
plotlist = plot_objects,
ncol = 3,
nrow = 4,
labels = names(plot_objects),
hjust = -5,
vjust = 2
)
这篇关于在这种情况下如何为多个表打印 ggplot?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!