使用R中的库cairoDevice在Cairo()和Cairo_png()中字体大小和mtext放置不一致

我在R中使用Cairo库在
Windows 7中创建了一些相当复杂的图表,用于反锯齿图形.我使用的是R2.15.1和cairoDevice版本2.19.我有一个问题,Cairo_png()中的字体大小比简单的基于屏幕的Cairo()中的字体大,并且mtext放置是不同的.举个简单的例子:

屏幕版代码:

> Cairo(4, 4)
> par(bg = "blue")
> plot.new()
> for (x in 1:30) mtext(format(x), line = -x, outer = TRUE, adj = 0, col = "white")

结果:

png版本代码:

> Cairo_png("test.png", 4, 4)
> par(bg = "red")
> plot.new()
> for (x in 1:30) mtext(format(x), line = -x, outer = TRUE, adj = 0, col = "white")
> dev.off()

png代码的结果:

正如您所看到的,png版本中的字体更大,并且mtext放置更宽.这是一个错误还是我做错了什么?

我应该补充一点,Cairo_svg()和Cairo_pdf()的行为与Cairo_png()相同.它们都输出相同,但与基于屏幕的Cairo()不一致.

最佳答案 正如我们在
cairoDevice documentation中看到的,在您提到的函数中,参数pointsize有不同的默认值:

Cairo(width = 7, height = 7, pointsize = 8, 
      surface = c("screen", "png", "pdf", "ps", "svg"), 
      filename = Cairo_pdf(filename, width = 7, height = 7, pointsize = 10)
Cairo_ps(filename, width = 7, height = 7, pointsize = 10)
Cairo_svg(filename, width = 7, height = 7, pointsize = 10)
Cairo_png(filename, width = 7, height = 7, pointsize = 10)

采取相同的点数

Cairo_png("test.png", 4, 4, pointsize = 8)
par(bg = "red")
plot.new()
for (x in 1:30) mtext(format(x), line = -x, outer = TRUE, adj = 0, col = "white")
dev.off()

返回此

点赞