ggplot2:将各个facet_wrap构面另存为单独的图对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ggplot2:将各个facet_wrap构面另存为单独的图对象相关的知识,希望对你有一定的参考价值。

我是facet_wrap的忠实拥护者。尽管在R中分割一个大数据框并绘制多个图并浏览的速度很快,但它并不是始终以纸质或幻灯片形式呈现的最佳工具。我发现自己在比例,二进制宽度和字体大小上浪费了很多时间,并最终在图上进行了修改。

有时,我只是将我的数据框细分为许多数据框,并分别为每个图绘制。稍后通过multiplot或手动加入它们。

[我想知道是否可能有一种方法以几乎相同的方式进行ggplot调用(一个大df,其中一个因数列用于刻面)或一种使ggplot从具有类似列表的数据帧分隔的内容中读取的方式我的刻面因素。理想的输出应该是多个单个图,稍后我将在inkscape上对其进行编辑(并使用free_y比例以减轻痛苦)]

要清楚,

df<-mtcars
ggplot(df,aes(df$mpg,df$disp,color=factor(cyl)))+
    geom_point(aes(df$mpg,df$disp))+
    facet_wrap( ~cyl)

产生一个图。在这种情况下,我想要的输出将是三个图,每个面一个。

答案

您可以使用lapply创建一个列表,其中每个cyl的值都有一个图:

# Create a separate plot for each value of cyl, and store each plot in a list
p.list = lapply(sort(unique(mtcars$cyl)), function(i) 
  ggplot(mtcars[mtcars$cyl==i,], aes(mpg, disp, colour=factor(cyl))) +
    geom_point(show.legend=FALSE) +
    facet_wrap(~cyl) +
    scale_colour_manual(values=hcl(seq(15,365,length.out=4)[match(i, sort(unique(mtcars$cyl)))], 100, 65))
)

[复杂的scale_colour_manual参数是一种为点标记着色的方法,如果cyl的所有值都包含在一次对ggplot的调用中,则它们将以相同的方式着色。

UPDATE:要解决您的意见,该如何处理:

# Fake data
set.seed(15)
dat = data.frame(group=rep(c("A","B","C"), each=100),
                 value=c(mapply(rnorm, 100, c(5,10,20), c(1,3,5))))

p.list = lapply(sort(unique(dat$group)), function(i) 
  ggplot(dat[dat$group==i,], aes(value, fill=group)) +
    geom_histogram(show.legend=FALSE, colour="grey20", binwidth=1) +
    facet_wrap(~group) +
    scale_fill_manual(values=hcl(seq(15,365,length.out=4)[match(i, sort(unique(dat$group)))], 100, 65)) +
    scale_x_continuous(limits=range(dat$value)) +
    theme_gray(base_size=15)
)

结果如下。请注意,上面的代码为您在所有三个图形上提供了相同的x比例,但没有相同的y比例。要获得相同的y比例,您可以将其硬编码为scale_y_continuous(limits = c(0,35)),也可以通过编程找到所设置的任何binwidth的最大数量,然后将其输入scale_y_continuous

# Arrange all three plots together
library(gridExtra)
do.call(grid.arrange, c(p.list, nrow=3))

enter image description here

以上是关于ggplot2:将各个facet_wrap构面另存为单独的图对象的主要内容,如果未能解决你的问题,请参考以下文章

ggplot2 facet_grid 带有构面标题

ggplot重命名facet_wrap中的构面标签

在 ggplot2 的 facet-grid/facet_wrap 中调整面板的相对空间

ggplot2 跨越组中的嵌套构面

将“整体”组添加到facet_wrap(ggplot2)

ggplot2 跨越组中的嵌套构面