- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试生成 10 对图,每页图有几对,并且正在使用 for
循环构建对。但是,这些图会作为单独的图而不是页面发送到设备。
下面的 MWE 具有相同的基本图形结构和 ggplot
版本,但基本图形有效且 ggplot
才不是。我需要做什么才能在第二个版本中正确分页?
library(ggplot2)
attach(mtcars)
# correct configuration
par(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 plot
par(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)
最佳答案
这是使用 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)
ml1 <- marrangeGrob(plt, nrow = 2, ncol = 1)
# Interactive use
ml1
# Non-interactive use, multipage pdf
ggsave("multipage.pdf", ml1)
关于r - for循环中的多个图忽略par,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50929344/
我正在尝试学习 PAR 和 PAR::Packer。我知道 PAR 是一个允许从 .par 文件加载模块的模块。 PAR::Packer中的pp、par.pl、parl这三个脚本我看不懂。 (注意:在
我想知道以下方法在如何引用对象参数方面有什么区别: public void DoSomething(object parameter){} 和 public void DoSomething(ref
根据关于并行集合的论文和互联网上的搜索,并行集合应该与 View 一起使用,但我不清楚两者之间的区别 coll.par.view.someChainedIterations 和 coll.view.p
我对par的理解是,它会在另一个核心中创建一个线程来执行。 但我未能通过以下测试代码证明这一理解,因为显示的结果似乎只有一个线程在运行。 你能帮我弄清楚这里出了什么问题吗? import Contro
通常,当我制作自己的绘图函数时,我会制作一个构造: op <- par("mypar"=myvalue) on.exit(par(op)) 这是将 par 恢复为之前值的标准方法。想象一下,您一直在运
一段时间以来,我一直在使用 PAR:Packer (pp) 为 Windows 创建二进制文件。它们总是很大(大约 6-8MB),这是可以理解的,最近我更新了我的包(我在 Windows 上使用 st
当我想快速查看 RStudio 中的图表时,我通常只使用 plot(r) 或使用 plot(r, main = title)< 添加标题。当我绘制全局栅格数据集的绘图时,“绘图” Pane 中的 xy
我正在开发一个与 PAR 捆绑在一起的大型 Perl 应用程序,以及一堆支持文件。 当应用程序在 PAR 中运行时,我可以使用 PAR::read_file 来获取存档中的这些各种文件。但是,在我开发
我正在使用 PAR::Packer,这个问题突然出现在我的脑海中。 PAR::Packer 在 Perl 中是如何工作的?它实际上是否将 Perl 脚本编译为 .exe,就像 g++ 将 C++ 源代
我想根据数据框中具有 10 个以上唯一值的变量数量来打印输出。这可以是任意数量的变量。我正在寻找一种方法来实现这一点,以便将绘图窗口设置为适合变量数量。 它应该是这样的: 2 vars -> 1 x
裁剪似乎不会影响 barplot() -- ?? par(xpd=F); barplot(1:60, ylim=c(0,6)); segments(0,0,200,100, lwd=5) 线段在 y=
我试图将三个图表绘制在一起,一个在另一个之下。 我想使用 par 将第一个图表的高度设为其他图表的两倍大,但我在使用 height 参数时遇到困难。 par(mfrow = c(3, 1),mar=c
我想知道是否有一种简单的方法可以只为绘图区域着色?相信par()$bg setting 定义了整个设备的背景颜色,所以我一直在应用低级绘图命令 polygon将彩色矩形添加到整个绘图区域。 例子 #c
这是我第一次尝试使用 Scala 的并行性。我有大量数据(可以存储为任何集合),我想使用简单的映射操作(例如 val out = data.par.map(foo(_) )在多核系统上并行化这些数据。
TL;DR:如何在 Par.Do 转换中访问创建作业时传递给作业的参数? 我有两个模板,一个用于开发,一个用于生产,它们都工作正常,只是每个模板中有一个值需要不同。到目前为止,我一直在“硬编码”这个值
我正在尝试测试 parallel 包,特别是 par 函数。我编写了一个简单的程序来测试并行性是否会加速顺序程序。 所以我在这里写了两个脚本,第一个是连续的: import Control.Paral
我有问题,我的图例太大,我的代码: par(mfrow=c(1,2)) hist(alvsloss,breaks = 100, freq=F,main="Histogramm, density cu
我正在尝试使用命名字符向量来保存自定义调色板,所以我可以说,例如调色板['red'] 而不是到处重复“#dc322f”。 但是,我似乎无法使用该向量的元素作为 par() 的参数。 (虽然它可以在其他
我正在遍历所有子页面以显示它们的标题和链接。但我还需要显示第一段节点(如果存在)。 例如,我会从以下内容页面中检索第一个 PAR 节点吗? /content /foo /jcr:cont
第1部分 根据Here SAR_x DAR_x * height ----- = -------------- SAR_y DAR_y * width 例如:宽 x 高 = 704x576,D
我是一名优秀的程序员,十分优秀!