一些背景:我试图分析的数据是流式细胞术数据(对于那些不熟悉这是什么的人来说,为了这个Q的目的,它基本上是用激光来描述不同的细胞类型)。这里的变量是在y轴上绘制的单元格的不同特性,每个变量都是从“父组”读取的。也就是说,如果感兴趣的变量是活细胞,则母体可以是肾细胞或肺细胞等。
我有一个大的数据表,有13个变量,需要在相同的x轴上绘制,即治疗后几周的时间。我需要针对时间绘制的每个变量,都需要一个不同的y轴标签和一个应该包括的标题----y轴标签以及变量所属的各自的“父组”的名称。我所采取的步骤是:
如您所知,“父组”名称或y轴标签不一定是每个变量名称唯一的。
r
for(i in variables){
table<-as.data.frame(test[,c("WEEK",i)])`
for(j in yaxis){
for (k in parent){
plot<-ggplot(table,aes(x=WEEK,y=table[,3]))+geom_line()+geom_point(size=2)+scale_shape_manual(values=1:25)+xlab("Weeks")+ylab(j)+theme_minimal()+ggtitle(paste0(k,"-",j))
ggsave(plot,file=paste0(paste(j,k,sep="_"),"plot.jpg"),width=14,height=10,units="cm")
}
}
rm(table)
rm(plot)
}我在这里尝试的是自动化for循环,为每个变量添加相应的y轴标签和标题--当然,我被困在一个循环中,它继续运行,每个变量生成13y轴标签的组合*13个地块标题组合。我需要13个地块,每个地块都有自己的y轴标签和绘图标题,而不需要手动输入每个地块,因为我希望将这些地块作为jpeg文件直接从for循环导出。我考虑过使用if或if等函数,但我不知道如何在这里应用这些函数。任何帮助,这将是非常感谢!
发布于 2020-06-04 02:29:03
这里有一个解释您的问题的方法:使用facet绘图并将Parent和Yaxis映射到facet标签中。这将导致一系列的面图,其中标签反映了Parent和Yaxis。
要做面处理,我们需要重塑数据框架。首先,调用库并创建一些有用的数据:
library(dplyr)
library(tidyr)
library(tibble)
library(ggplot2)
# make fake data
data <- tibble(
Week = seq(from = 1, length.out = 91),
cells_live = runif(min = 1, max = 10, n = 91),
cells_live_dividing = runif(min = 1, max = 10, n = 91),
cells_live_aging = runif(min = 1, max = 10, n = 91)
)
mapping <- tibble(
variables = c("cells_live", "cells_live_dividing", "cells_live_aging"),
Parent = c("COUNT", "live", "live"),
Yaxis = c("live cells", "divinding cells", "aging")
)然后,我们使用来自pivot_longer的tidyr将数据重新格式化为长格式。
data <- data %>%
pivot_longer(cols = -Week,
names_to = "vars",
values_to = "values")然后,我们使用left_join从映射表中输入数据,并基于Parent和Yaxis创建一个带有facet标签的新列。
data <- data %>%
left_join(mapping, by= c("vars" = "variables")) %>%
mutate(facet_labels = paste0(Parent, ": ", Yaxis))最后,我们调用ggplot,其中我们使用facet_labels作为面集变量:
ggplot(data = data, aes(x = Week, y = values)) +
geom_point() +
facet_wrap(.~ facet_labels, scales = "free") +
theme_minimal()有了这个输出:

这并不是你所要求的,但希望它对你有帮助。
https://stackoverflow.com/questions/62185211
复制相似问题