为了账号安全,请及时绑定邮箱和手机立即绑定

for循环中的多个图忽略par

for循环中的多个图忽略par

RISEBY 2019-09-06 16:36:06
我试图生成10对图,每页几个图,并使用for循环来构建对。但是,这些图是作为单独的图而不是页面发送到设备的。下面的MWE具有相同的基本图形和ggplot版本结构,但基本图形有效,ggplot但没有。在第二个版本中,我需要做什么才能使分页正确?library(ggplot2)attach(mtcars)# correct configurationpar(mfrow=c(2,2))for (ii in 1:3){  vars <- c("wt", "disp", "wt")  plot(get(vars[ii]), mpg)  hist(get(vars[ii]))}# places each on separate plotpar(mfrow=c(2,2))for (ii in 1:3){  vars <- c("wt", "disp", "wt")  p <- ggplot(mtcars, aes(get(vars[ii]), mpg)) + geom_point(size=4)  plot(p)  p <- ggplot(mtcars, aes(get(vars[ii]))) + geom_histogram()  plot(p)}detach(mtcars)
查看完整描述

2 回答

?
撒科打诨

TA贡献1934条经验 获得超2个赞

这是一种方法cowplot::plot_grid。该plot_duo函数使用tidyeval方法ggplot2 v3.0.0


# install.packages("ggplot2", dependencies = TRUE)


library(rlang)

library(dplyr)

library(ggplot2)

library(cowplot)


plot_duo <- function(df, plot_var_x, plot_var_y) {


  if (is.character(plot_var_x)) {

    print('character column names supplied, use ensym()')

    plot_var_x <- ensym(plot_var_x)

  } else {

    print('bare column names supplied, use enquo()')

    plot_var_x <- enquo(plot_var_x)

  }


  if (is.character(plot_var_y)) {

    plot_var_y <- ensym(plot_var_y)

  } else {

    plot_var_y <- enquo(plot_var_y)

  }


  pts_plt <- ggplot(df, aes(x = !! plot_var_x, y = !! plot_var_y)) + geom_point(size = 4)

  his_plt <- ggplot(df, aes(x = !! plot_var_x)) + geom_histogram()


  duo_plot <- plot_grid(pts_plt, his_plt, ncol = 2)

}


### use character column names

plot_vars1 <- c("wt", "disp", "wt")

plt1 <- plot_vars1 %>% purrr::map(., ~ plot_duo(mtcars, .x, "mpg"))

#> [1] "character column names supplied, use ensym()"

#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

#> [1] "character column names supplied, use ensym()"

#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

#> [1] "character column names supplied, use ensym()"

#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.


plot_grid(plotlist = plt1, nrow = 3)



### use bare column names

plot_vars2 <- alist(wt, disp, wt)

plt2 <- plot_vars2 %>% purrr::map(., ~ plot_duo(mtcars, .x, "mpg"))

#> [1] "bare column names supplied, use enquo()"

#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

#> [1] "bare column names supplied, use enquo()"

#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

#> [1] "bare column names supplied, use enquo()"

#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.


plot_grid(plotlist = plt2, nrow = 3)



要将图分成多个页面,我们可以使用gridExtra :: marrangeGrob


ml1 <- marrangeGrob(plt, nrow = 2, ncol = 1)


# Interactive use

ml1

 


# Non-interactive use, multipage pdf

ggsave("multipage.pdf", ml1)


查看完整回答
反对 回复 2019-09-06
  • 2 回答
  • 0 关注
  • 589 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信