ggsave中如何根据facet_grid行数动态定义height参数
R可视化分面高度自适应实现方法
可以实现,你只需要提前计算每个子集对应的facet行数,即可动态设置ggsave的height参数。
修改后完整代码如下:
data_l <- split(data,list(data$Sample.type,data$Locality), drop=TRUE) lapply(names(data_l), function(i){ # 计算当前子集facet的行数(即Locality的唯一值数量) facet_row_n <- length(unique(data_l[[i]]$Locality)) ggplot(data_l[[i]], aes(Date, Concentration, group = Chemicals, col = as.factor(Chemicals))) + geom_line() + geom_point() + facet_grid(cols = vars(Chemicals), rows = vars(Locality), scales = "fixed") + ylab(paste("Concentrations in", data_l[[ i ]]$Measuring.Unit[ 1 ])) + # 动态设置高度,单行为10cm,多行按比例叠加 ggsave(paste(i, ".png", sep = ""), dpi = 400, width = 30, height = facet_row_n * 10, units = "cm") }) dev.off()
核心修改逻辑:
- 新增
facet_row_n变量统计当前数据集的Locality唯一值数量,和你设置的facet_grid行分面数量完全对应 - 把ggsave的height参数替换为
facet_row_n * 10,即可实现1行对应10cm、2行对应20cm的适配逻辑,如果你后续需要调整单分面的高度基准,直接修改乘数即可。
内容的提问来源于stack exchange,提问作者Sylvain
相关产品推荐
相关产品推荐

