【问题标题】:How to control font size in png?如何控制png中的字体大小?
【发布时间】:2012-05-05 08:27:44
【问题描述】:

我正在尝试为手稿制作图形,该手稿应使用 MS Word 编写,它不接受 pdf 格式的图形。该杂志要求在 Word 文件中嵌入图形的初稿。这些图形的分辨率最低应为 300 dpi,宽度为 169 毫米或 81 毫米(两列/一列)。我注意到,当我将图片的分辨率指定为 300(res = 300)时,字体大小会绑定到这个值。这适用于某些图形(第一个示例,example.png),而对于其他图形(example2.png)则更糟。如何控制字体大小,使图形的尺寸和分辨率保持不变?

library(ggplot2)
library(grid)

data(iris)

vplayout <- function(x, y) viewport(layout.pos.row = x, layout.pos.col = y)

p <- ggplot(iris, aes(Species, Petal.Length))
q <- ggplot(iris, aes(Species, Petal.Width))
len <- p + geom_boxplot()
wid <- q + geom_boxplot()

png("example.png", width = 169, height = 100, units = "mm", res = 300)
grid.newpage()
pushViewport(viewport(layout = grid.layout(1, 2)))
print(len, vp = vplayout(1, 1))
print(wid, vp = vplayout(1, 2))
dev.off()

png("example2.png", width = 81, height = 100, units = "mm", res = 300)
grid.newpage()
pushViewport(viewport(layout = grid.layout(1, 2)))
print(len, vp = vplayout(1, 1))
print(wid, vp = vplayout(1, 2))
dev.off()

换句话说,我想减小example2.png中的字体大小,但保持两个图的布局和尺寸不变。

Example.png

Example2.png

【问题讨论】:

  • 我不明白:Example1.png 的物理宽度是 Example2.png 的两倍,因此如果您像这里一样将两个图像都显示为全页宽度,则第二个应该被扩展并且字体看起来更大.如果您以 1:1 缩放(实际尺寸)显示/打印它们,字体和分辨率应该相同,不是吗?
  • 嗯,不,我猜。这也是我的想法,但字体似乎是恒定的。您会看到重叠的物种名称。如果字体大小与设备大小相关联,那么 Example2.png 中的标签不会重叠?我认为这是因为 pointsize 和 res 在 png 函数中连接了

标签: r ggplot2 png figure r-grid


【解决方案1】:

使用theme_XXX() 函数的base_size 参数,您可以更改所有文本的整体字体大小。

png("example2.png", width = 81, height = 100, units = "mm", res = 300)
grid.newpage()
pushViewport(viewport(layout = grid.layout(1, 2)))
print(len + theme_gray(base_size=12*(81/169)), vp = vplayout(1, 1))
print(wid + theme_gray(base_size=12*(81/169)), vp = vplayout(1, 2))
dev.off()

【讨论】:

  • +1 更接近问题。我已经删除了我的答案。
  • 完美!我自己不会发现这个。值得一问。谢谢!
【解决方案2】:

据我所知,无论分辨率和设备大小如何,字体大小都是相同的。您可以在以下示例中进行检查:

library(grid)

png("example1.png", width = 30, height = 5, units = "mm", res = 200)
g <- grid.text("testing font size", gp=gpar(fontsize=12))
width <- convertUnit(grobWidth(g), "mm")
height <- convertUnit(grobHeight(g), "mm", "y")
grid.rect(width=width, height=height, gp=gpar(lty=2, fill=NA))
dev.off()


png("example2.png", width = 60, height = 5, units = "mm", res = 500)
grid.text("testing font size", gp=gpar(fontsize=12))
grid.rect(width=width, height=height, gp=gpar(lty=2, fill=NA))
dev.off()

但您似乎确实想更改字体大小。

【讨论】:

  • 是的,它似乎是。我想控制字体大小,因为 example2.png 中的标签重叠。在这种情况下,Brian Diggs 示例完美地解决了这个问题,但您是对的,您建议的方法可能更有用,因为每个图中的字体大小应该相同。
【解决方案3】:

只需更改 png 的 pointsize 属性。例如:

png(filename="plot4.png", width=580, height=700, pointsize=20)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-02
    • 2016-05-24
    • 1970-01-01
    • 2015-05-05
    • 2014-09-23
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多