我想使用相同的ggplot代码生成8个不同的数字,条件是我的数据帧中的数字。通常我会使用facet_grid,但在这种情况下,我想最终得到每个人的数字的pdf。例如,我想在这里每行一个pdf:
df <- read.table(text = "
xvalue yvalue location planting crop
1 5 A early corn
2 3 A late corn
6 2 A early soy
7 4 A late soy
4 7 S early corn
2 6 S late corn
3 2 S early soy
5 1 S late soy
", sep = "", header = TRUE)
基本ggplot:
library(ggplot2)
ggplot()+
geom_point(aes(x=xvalue, y=yvalue), data=df)
但不是facet_grid
来获取位置x种植x作物组合,我想要一个单独的pdf。
答案 0 :(得分:1)
首先我将你的MWE变成data.table
,因为它更快
library(data.table)
library(ggplot2)
library(gridExtra)
df <- data.table(read.table(text = "
xvalue yvalue location planting crop
1 5 A early corn
2 3 A late corn
6 2 A early soy
7 4 A late soy
4 7 S early corn
2 6 S late corn
3 2 S early soy
5 1 S late soy
", sep = "", header = TRUE))
我将您的planting
和corn
信息粘贴在一起以创建单独的列:
df[ , plantingCrop := paste(df$planting, df$crop, sep = "-") ]
我创建了一个包含planting
和crop
所有组合的字符向量。你会在一秒钟内看到原因:
plantingCrop1 <- unique(df$plantingCrop)
我使用gridExtra
在单独的.pdf
页面中创建所有图表。我基本上创建了一个循环,绘制了与上面plantingCrop1
对象中的字符一样多的图形。在每个循环中,dat
是您要将plantingCrop
和planting
列粘贴在一起的唯一crop
组要绘制的子集化组。它重复这一切,直到一切都完成。
pdf("plantingCrop.pdf", onefile = TRUE)
for(i in 1:length(plantingCrop1)){
dat <- subset(df, plantingCrop==plantingCrop1[i])
cropPlot <- ggplot(dat, aes(xvalue,yvalue)) +
geom_boxplot(aes(color = location)) +
theme_bw() +
ggtitle(bquote(atop(.("Boxplot of Stuff"),
atop(italic(.(plantingCrop1[i])), "")))) +
labs(x = "xvalue", y = "yvalue") +
theme(legend.position = "top", legend.title=element_blank())
grid.arrange(cropPlot)
}
dev.off()
我还提供了使用plantingCrop
名称作为副标题命名文件的正确方法。那是在ggtitle
电话中。
我建议您在有更多数据的情况下将geom_boxplot(aes(color = location))
更改为geom_boxplot(aes(fill = location)
,因为它更好地显示在图表上,但我现在就这样离开,这样您就可以看到不同的群组
答案 1 :(得分:0)
这是另一种方法:
library(plyr)
library(ggplot2)
df <- read.table(text = "
xvalue yvalue location planting crop
1 5 A early corn
2 3 A late corn
6 2 A early soy
7 4 A late soy
4 7 S early corn
2 6 S late corn
3 2 S early soy
5 1 S late soy
", sep = "", header = TRUE)
fplot <- function(d)
{
require(ggplot2)
p <- ggplot(d, aes(x = xvalue, y = yvalue)) +
geom_point(size = 4) +
xlim(0, 10) + ylim(0, 10)
file <- with(d, paste0(paste(planting, crop, location, sep = "_"), ".pdf"))
ggsave(file, p)
}
d_ply(df, ~ rownames(df), fplot)
文件名看起来像early_corn_A.pdf,并保存在当前的工作目录中。为了方便起见,我设置了固定的x / y限制。该功能需要
一行数据框作为输入并输出pdf格式的图。 plyr::d_ply()
函数处理数据框的每一行,并为每行生成一个单独的图。
答案 2 :(得分:0)