簡體   English   中英

將每個修改的構面保存在ggplot2中

[英]saving each modified facet in ggplot2

我嘗試使用for loop將虹膜數據集中的每個Species數據保存為.png文件。 但是在此之前,我想根據實際數據繪制過程中的需要修改刻面條的厚度。

但是,當我嘗試在每個方面下面編寫以下代碼時,只給了我這些物種的空圖。

這是我的嘗試,

library(ggplot2)
plot_list = list()
for (i in unique(iris$Species)) {
  p = ggplot(iris[iris$Species == i, ], aes(x=Sepal.Length, y=Sepal.Width)) +
    geom_point(size=3, aes(colour=Species))+
    facet_wrap(~Species)

#this part to modify facet_wrap strips
  g1 = ggplotGrob(p)

  pos =  c(unique(subset(g1$layout, grepl("panel", g1$layout$name), select = t)))
  for(i in pos) g1$heights[i-1] = unit(0.4,"cm")

  grobs = which(grepl("strip", g1$layout$name))
  for(i in grobs) g1$grobs[[i]]$heights <-  unit(1, "npc") 

  grid.newpage()
  grid.draw(g1)
  plot_list[[i]] = g1
}

#finally write the modified graphs to file


for (i in 1:3) {
  file_name = paste("iris_plot_", i, ".png", sep="")
  tiff(file_name)
  print(plot_list[[i]])
  dev.off()
}

當前,此代碼正在生成空圖,不知道為什么! 任何幫助將不勝感激!

您無需使用ggplotGrob修改帶鋼高度。 在ggplot的theme()設置相關參數可以做到:

p1 = ggplot(iris[iris$Species == "setosa",],
            aes(x = Sepal.Length, y = Sepal.Width)) +
  geom_point() +
  facet_wrap(~Species)

p2 = p1 + theme(strip.text.x = element_text(margin = margin(t = 10, b = 10)))
# note: default margin for top & bottom is 5.5

gridExtra::grid.arrange(p1, p2, ncol = 2)

比較

至於其他,您可能希望在第一個循環之后檢查plot_list的長度。 最初,您將i賦值為iris$Species的唯一值,然后嘗試將其用作繪圖列表的索引。 plot_list的前三個元素不包含繪圖。

在此示例中,以下內容將起作用。 您可能需要對實際用例進行一些修改:

plot_list = list()
loop.list <- unique(iris$Species)
for (i in seq_along(loop.list)) {
  p = ggplot(iris[iris$Species == loop.list[i], ], 
             aes(x = Sepal.Length, y=Sepal.Width)) +
    geom_point(size = 3, aes(colour = Species))+
    facet_wrap(~Species) +
    theme(strip.text.x = element_text(margin = margin(t = 11, b = 11)))

  plot_list[[i]] <- ggplotGrob(p)
}

for (i in 1:3) {
  file_name = paste("iris_plot_", i, ".png", sep="")
  tiff(file_name)
  grid.draw(plot_list[[i]])
  dev.off()
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM