2017-09-02 2 views
3

Est-il possible d'obtenir un anti-aliasage fin pour les tracés ggplot exportés? J'ai essayé le paquet Cairo ainsi que quelques périphériques différents, mais ils semblent tous avoir des bords dentelés.Anticrénelage pour les exportations de ggplot

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 ne cairo

png-cairo PNG cairo

tiff-cairo TIFF cairo

png-ggsave-cairo PNG ggsave cairo

Pour ma but, il est important que les images sont PNG ou TIFF (sans perte) à 300 dpi. Je suis conscient que je peux exporter vers un format vectoriel (SVG, PDF etc) et ensuite convertir en PNG/TIFF en utilisant un autre programme, mais c'est évidemment un travail supplémentaire. Je suis curieux de savoir s'il y a des solutions dans R que je néglige.

photoshop

Pour référence, ci-dessus est la qualité de rendu de Photoshop. PNG Arial 14pt.

Répondre

1

Ok. J'ai peut-être trébuché sur quelque chose ici. Lorsque j'utilise annotate plutôt que geom_text, l'anti-aliasing cairo semble fonctionner.

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

Ainsi, il semble que geom_text est overplotting le même texte qui pourrait être la question. Je pensais que cette chose surpeuplée a été fixée à un moment donné. Je pense qu'il y a encore place à amélioration avec l'anti-aliasing, mais c'est beaucoup mieux qu'avant.

+0

oui, erreur de l'utilisateur, et rien à voir avec l'anti-aliasing. 'geom_text' dans vos overplots de code d'origine, comme il est supposé le faire. C'est pourquoi "annoter" existe. Vous pouvez également utiliser un autre ensemble de données pour la couche de texte. – baptiste