ggplot导出的抗锯齿

时间:2017-09-02 12:55:14

标签: r ggplot2 antialiasing

是否可以为导出的ggplot图获得精细的抗锯齿?我尝试了Cairo包以及一些不同的设备,但它们似乎都有锯齿状的边缘。

library(ggplot2)
library(Cairo)

p <- ggplot(data.frame(x=1:5,y=1:5),aes(x=x,y=y))+
  geom_text(aes(2.5,2.5),label="Brown Fox bla bla..",size=5)+
  labs(x=NULL,y=NULL)+
  theme_bw()+
  theme(plot.background=element_blank(),
        plot.margin = margin(c(0,0,0,0)),
        axis.title = element_blank(),
        axis.text = element_blank(),
        axis.ticks = element_blank(),
        axis.line = element_blank(),
        panel.grid = element_blank(),
        panel.border = element_blank(),
        panel.background = element_blank())

png("test-nocairo.png",height=2,width=6,units="cm",res=300)
print(p)
dev.off()

png("test-cairo.png",height=2,width=6,units="cm",res=300,type="cairo")
print(p)
dev.off()

tiff("test-cairo.tiff",height=2,width=6,units="cm",res=300,type="cairo")
print(p)
dev.off()

ggsave("test-ggsave.png",height=2,width=6,units="cm",dpi=300,type="cairo")

png-nocairo PNG no cairo

png-cairo PNG cairo

tiff-cairo TIFF cairo

png-ggsave-cairo PNG ggsave cairo

出于我的目的,重要的是图像是300dpi的PNG或TIFF(无损)。我知道我可以导出为矢量格式(SVG,PDF等),然后使用其他程序转换为PNG / TIFF,但这显然是额外的工作。如果R中有任何我想要的解决方案,我很好奇。

photoshop

作为参考,上面是来自photoshop的渲染质量。 PNG Arial 14pt。

1 个答案:

答案 0 :(得分:1)

确定。我可能在这里偶然发现了什么。当我使用annotate而不是geom_text时,cairo抗锯齿似乎有效。

p <- ggplot(data.frame(x=1:5,y=1:5),aes(x=x,y=y))+
  annotate("text",x=2.5,y=2.5,label="Brown Fox bla bla..",size=5)+
  labs(x=NULL,y=NULL)+
  theme_bw()+
  theme(plot.background=element_blank(),
        plot.margin = margin(c(0,0,0,0)),
        axis.title = element_blank(),
        axis.text = element_blank(),
        axis.ticks = element_blank(),
        axis.line = element_blank(),
        panel.grid = element_blank(),
        panel.border = element_blank(),
        panel.background = element_blank())

png("test-annotate-cairo.png",height=2,width=6,units="cm",res=300,type="cairo")
print(p)
dev.off()

png-annotate-cairo

因此,似乎geom_text过度绘制可能是问题的相同文本。我认为这个过度绘图的事情在某些方面得到了修复。我认为抗锯齿仍有改进的余地,但这比以前好多了。