在这种情况下如何为多个表打印 ggplot? [英] How to print ggplot for multiple tables in this case?

查看:28
本文介绍了在这种情况下如何为多个表打印 ggplot?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个代码可以打印多个表格

 库(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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆