我创建了一个大型数据框(> 100列)
s <- data.frame(x1, x2,....,x100)
var_list <- names(s)
然后我手动为相应的y轴创建另一个包含100个名称的列表:
y_names <- c("Time", "hr", "W m-2"..... 100 items)
最后,我遍历列表以创建一个包含100个图的PDF:
plot_list = list()
for (i in 2:length(var_list)) {
p = ggplot(s, aes_string(x = x1, y = var_list[i])) +
geom_line()+
ylab(y_names[i])+
ggtitle(paste(var_list[i]))
plot_list[[i]] = p
}
# create pdf where each page is a separate plot. ,
pdf("figures.pdf", width=7, height=1.5)
for (i in 2:length(var_list)) {
print(plot_list[[i]])
}
dev.off()
显然,这是一个问题,因为我无法确定我是否将正确的y轴给予正确的情节,而不是通过查看最终的情节。如果我必须对订单进行更改,那就完全不同了。
如何以更好的方式设置名称?也许在数据框本身,我可以确定订单?
答案 0 :(得分:1)
您可以使用查找表和Load
函数。这确保了所需的y轴标签始终用于给定的数据列。这是一个例子:
让我们创建一个包含我们想要用于所有可能列名的y标签的查找表。在match
中,lookup
是数据框var_names
的可能列名。 s
是我们想要在图中使用的相应y轴标签。
y_lab
lookup = data.frame(var_names=c("wm","hr","time","grp", 'cm'), y_lab=c("W m-2", "Hour", "Time", "Group","Centimeters"))
现在,在绘制数据时,使用 var_names y_lab
1 wm W m-2
2 hr Hour
3 time Time
4 grp Group
5 cm Centimeters
为图中给定的y列标识正确的match
。在下面的示例中,我更改了您的代码示例,以直接使用数据框列名作为循环变量。请注意使用lookup$y_lab
函数为match
的当前值获取正确的y_lab
。
yvar
另一种选择是创建所有y值的单面图。这将是这样的:
for (yvar in names(s)[-1]) {
p = ggplot(s, aes_string(x = "x1", y = yvar)) +
geom_line() +
ylab(lookup$y_lab[match(yvar, lookup$var_names)]) +
ggtitle(yvar)
plot_list[[yvar]] = p
}