lapply假設我有一個資料框串列,我想使用and將它們一一繪制geom_tile,并將ggsave其本地到我的計算機:
library(ggplot2)
df1 <- data.frame(grp = rep("A", 30),
point = 1:30,
y = rep(1, 30),
var = sample(c(T, F), 30, replace = T))
df2 <- data.frame(grp = rep("B", 100),
point = 1:100,
y = rep(1, 100),
var = sample(c(T, F), 100, replace = T))
df_list <- list(df1, df2)
# this should save "A.png" and "B.png" to the current directory
lapply(df_list, function(x) {
p <- ggplot(x, aes(point, y, fill = var)) geom_tile(color = "black") theme_minimal()
ggsave(filename = paste0(unique(x[["grp"]]), ".png"), plot = p, width = 8, height = 3)
})
通常,設定ggsave(width = 8)對于大多數資料幀來說都是完美的,但對于其中一些資料幀來說,它們具有例外大量的觀察結果,這width = 8將過于擁擠。
例如,df1(A.png) 適用于width = 8:

但是,df2(B.png) 可能過于擁擠:

例如,在 中df2,我想將其保存為ggsave(width = 25)。

有沒有辦法根據我們正在繪制的資料框中的觀察數量自動ggsave(width)更改引數以獲得最佳比例圖(例如,如果資料框有超過 100 個資料點,應該大于 25,我想它會自動縮放)?width
我知道很難定義最佳 scaled,但這里的重點是找到一種ggsave(width)在每次lapply迭代中都有不同的方法。
提前致謝!
uj5u.com熱心網友回復:
我們可以使用ifelseorcase_when陳述句來設定基于 的寬度nrow()。
lapply(df_list, function(x) {
p <- ggplot(x, aes(point, y, fill = var))
geom_tile(color = "black")
theme_minimal()
ggsave(filename = paste0(unique(x[["grp"]]), ".png"),
plot = p,
width = ifelse(nrow(x) > 80, 25, 4),
height = 3)
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/466739.html
