【问题标题】:How can I prevent resizing of fonts, plot objects etc. in R?如何防止在 R 中调整字体、绘图对象等的大小?
【发布时间】:2017-01-02 18:08:12
【问题描述】:

我想在同一个图像中有多个图,并且我想根据图像有不同数量的图。准确地说,我首先创建了一个 1x2 的图矩阵,然后是一个 3x2 的图矩阵。我想对这两个图像使用相同的基本设置 - 尤其是相同的字体大小,因为这是用于纸张,并且字体大小必须至少为 6 pt。

为了实现这一点,我为 R 编写了以下代码:

filename = "test.png"
font.pt = 6    # font size in pts (1/72 inches)
total.w = 3    # total width in inches
plot.ar = 4/3  # aspect ratio for single plot
mat.col = 2    # number of columns
mat.row = 1    # number of rows
dpi = 300

plot.mar = c(3, 3, 1, 2) + 0.1
plot.mgp = c(2, 1, 0)
plot.w = total.w / mat.col - 0.2 * plot.mar[2] - 0.2 * plot.mar[4]
plot.h = plot.w / plot.ar
total.h = (plot.h + 0.2 * plot.mar[1] + 0.2 * plot.mar[3]) * mat.row

png(filename, width = total.w, height = total.h, res = dpi * 12 / font.pt, units = "in")

par(mfrow = c(mat.row, mat.col), mai = 0.2 * plot.mar, mgp = plot.mgp)

plot(1, 1, axes = T, typ = 'p', pch = 20, xlab = "Y Test", ylab = "X Test")

dev.off()

如您所见,我将总宽度设置为 3 英寸,然后计算我的图像的总高度,以便绘图的纵横比正确。字体大小只会将分辨率改变一个因素。 无论如何,现在的问题是,当我从mat.row = 1 转到mat.row = 3 时,字体大小发生了显着变化。其他事情也会发生变化,例如轴和边距的标签,尽管我之前专门设置了英寸。看看:

设置为 3 行时(裁剪图像):

仅设置 1 行时(裁剪图像):

如何防止这种情况发生?据我所知,我做了我能做的一切。这花了我相当长的时间,所以我想让它工作而不是切换到gglplot 并再次从头开始学习所有内容。它也足够小,我真的希望我只是错过了一些非常明显的东西。

【问题讨论】:

  • 也许你想要par(ps = font.pt)?
  • This SO question/answer 可能会有所帮助。
  • eipi10:也许我误解了这一点,但是那个答案中的人发现的是,当你改变宽度和高度时,元素保持相同的大小。我知道,这正是我在这里尝试使用的。我的问题是,这不是我的具体示例中的工作方式。
  • Nathan Day:我之前尝试过,但没有帮助。这并不奇怪,因为在我的示例中,它甚至不适用于默认字体大小。两种情况下的字体大小相同;分辨率相同;然而,一个文本比另一个大。老实说,目前对我来说这似乎是一个错误。

标签: r plot


【解决方案1】:

在?par我们可以找到:

在恰好有两行和两列的布局中,“cex”的基值 减少 0.83 倍:如果有三个或更多 行或列,缩减因子为 0.66。

因此,当您将 mfrow 的值从 (2, 1) 更改为 (2, 3) 时,cex 的值将从 0.83 更改为 0.66。 cex 影响字体大小和文本行高。

因此,您可以手动为绘图指定 cex 值。

par(mfrow = c(mat.row, mat.col), mai = 0.2 * plot.mar, mgp = plot.mgp, cex = 1)

希望,这正是你所需要的。

mat.row = 1 的绘图(裁剪): 并绘制mat.row = 3(裁剪):

【讨论】:

  • 非常感谢!这些因素正是我在尝试不同的行和列时凭经验发现的。这让我发疯,但这解释了它。在我的辩护中,我特别避免更改 cex 值,这就是为什么我没有怀疑解释会隐藏在 ?par 中。
猜你喜欢
  • 1970-01-01
  • 2019-01-04
  • 1970-01-01
  • 1970-01-01
  • 2012-07-27
  • 2017-08-13
  • 2011-01-22
  • 1970-01-01
  • 2014-11-30
相关资源
最近更新 更多