Cairo()和Cairo_png()中的字体大小和多行文字位置不一致,使用R中的库cairoDevice

Cairo()和Cairo_png()中的字体大小和多行文字位置不一致,使用R中的库cairoDevice,r,cairo,R,Cairo,我正在使用Cairo库在windows7下为抗锯齿图形创建一些相当复杂的图表。我使用的是R2.15.1和cairoDevice版本2.19。我有一个问题,Cairo_png()中的字体比基于简单屏幕的Cairo()中的字体大,并且多行文字的位置不同。举一个简单的例子: 屏幕版本代码: > Cairo(4, 4) > par(bg = "blue") > plot.new() > for (x in 1:30) mtext(format(x), line = -x, out

我正在使用Cairo库在windows7下为抗锯齿图形创建一些相当复杂的图表。我使用的是R2.15.1和cairoDevice版本2.19。我有一个问题,Cairo_png()中的字体比基于简单屏幕的Cairo()中的字体大,并且多行文字的位置不同。举一个简单的例子:

屏幕版本代码:

> 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版本的字体更大,多行文字的位置更宽。这是一个错误还是我做错了什么

我应该补充一点,Cairo\u svg()和Cairo\u pdf()的行为方式与Cairo\u png()相同。它们的输出相同,但与基于屏幕的Cairo()不一致

正如我们在中所看到的,在您提到的函数中,参数
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)
采用相同的
pointsize

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()
还这个


谢谢你,太好了。我有一个(有些)相关的问题。如果我有一个Cairo()屏幕窗口,我如何复制和粘贴它,或者使用R代码访问它以将其保存到文件中(就像我可以使用标准的R图形窗口一样)?很难找到答案。。这可能值得单独问一个问题。