在PDF格式的多图中绘制边距和绘图大小的麻烦

gun*_*ica 2 r

我正在尝试制作大量情节并将其转储为PDF格式.有些情节自然会在一起,所以我希望它们与PDF格式相同.但是,尺寸会变形,或标题和x轴标签不会显示.有谁知道如何解决这一问题?

这是一个例子:

set.seed(1)
x <- runif(100)

pdf(file="My pdf.pdf", paper="letter")
  par(mfrow=c(2,1))                     # squished
  hist(x, freq=FALSE)
  lines(density(x))
  qqnorm(x)
dev.off()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

pdf(file="My pdf.pdf", paper="letter")
  par(mfrow=c(2,1), pin=c(3,3))         # no titles, etc.
  hist(x, freq=FALSE)
  lines(density(x))
  qqnorm(x)
dev.off()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

pdf(file="My pdf.pdf", paper="letter")
  par(mfrow=c(2,1), pin=c(3,3), mar=c(4,2,2,1))  # squished again
  hist(x, freq=FALSE)
  lines(density(x))
  qqnorm(x)
dev.off()

pdf(file="My pdf.pdf", paper="letter")
  par(mfrow=c(2,1), mar=c(4,2,2,1), pin=c(3,3))  # now titles but overlapping
  hist(x, freq=FALSE)
  lines(density(x))
  qqnorm(x)
dev.off()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我想要的不仅仅是执行此操作的代码,还要了解其工作原理.例如,为什么在最后两个版本中更改参数的顺序会产生很大的不同.请注意,我会在页面上有不同数量的图表(有时是2,4或8),尽管我只是在这里展示最简单的情况.如果存在的话,一些可以很好地自动缩放绘图的代码可能会很好.

jor*_*ran 6

我的一般建议是(1)只坚持一个测量单位,英寸或线条,(2)做一些算术来确定你的设备大小需要多大才能适合你正在绘制的内容.

你混合marpin其使用的线条和英寸.我当然不知道1英寸加1行的高度是多么高(虽然我确信我们可以一起破解计算它).

所以想象一下,你告诉R将两个地块绘制在一起,每个都是3英寸高(pin = c(3,3)).我认为您忘记的部分是默认设备尺寸pdf仅为7英寸高.

因此,如果我们使用英寸设置图形边距,然后将设备尺寸调整为适当的高度:

pdf(file="My pdf.pdf", paper="letter",width = 7,height = 10)
  par(mfrow=c(2,1), mai=c(1,0.5,0.5,0.25), pin=c(3,3))
  hist(x, freq=FALSE)
  lines(density(x))
  qqnorm(x)
dev.off()
Run Code Online (Sandbox Code Playgroud)

应该工作.(我总是增加一点额外的空间.)

  • @gung在一个干净的会话中,运行`par(mfrow = c(2,1))`然后运行`par("pin")`.然后运行`par(pin = c(3,3))`然后运行`par("pin")`.最后,运行`par(mar = c(4,2,2,1))`然后再次运行`par("pin")`. (2认同)