2012-04-24 3 views
4

J'essaie de faire des figures pour un manuscrit, qui devrait être écrit avec MS Word, qui n'accepte pas les figures en format pdf. Le journal demande le premier brouillon avec des chiffres incorporés dans le fichier Word. Ces chiffres doivent avoir une résolution minimale de 300 dpi et avoir une largeur de 169 mm ou 81 mm (deux/une colonne). Je remarque que lorsque je spécifie la résolution de l'image à 300 (res = 300), la taille de la police est liée à cette valeur. Cela fonctionne bien avec quelques chiffres (le premier exemple, example.png), et pire avec d'autres (example2.png). Comment puis-je contrôler la taille de la police afin que les dimensions et la résolution de la figure restent fixes?Comment contrôler la taille de la police en 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() 

En d'autres termes, je voudrais diminuer la taille de la police dans example2.png, mais garder la mise en page et les dimensions des deux parcelles qu'ils sont.

example.png Example.png

example2.png Example2.png

+0

Je ne comprends pas: Example1.png est physiquement deux fois plus large que Example2.png, donc si vous affichez les deux images largeur pleine page comme ici le second devrait être étendu et la police semble plus grand. Si vous les affichez/imprimez tous les deux au zoom 1: 1 (taille réelle), la police et la résolution doivent être identiques, non? – baptiste

+1

Eh bien, non, je suppose. C'est ce que je pensais aussi, mais la police semble être en quelque sorte constante. Vous voyez les noms d'espèces qui se chevauchent. Si la taille de la police était connectée à la taille du périphérique, les étiquettes de Example2.png ne se chevaucheraient pas? Je pense que c'est parce que pointsize et res sont connectés dans la fonction png – Mikko

Répondre

5

En utilisant l'argument base_size à la fonction theme_XXX(), vous pouvez modifier la taille globale de police pour tout le texte.

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() 

enter image description here

+0

+1 pour être plus proche de la question. J'ai supprimé ma réponse. – gauden

+0

Parfait! Je n'aurais pas trouvé ça par moi-même. Ça vaut le coup de demander. Merci! – Mikko

1

Pour autant que je peux dire au fontsize est la même quelle que soit la résolution et la taille appareil. Vous pouvez le vérifier dans les exemples suivants:

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() 

Mais il semble que vous vouliez réellement changer la taille de la police.

+0

Oui, il semble être. Je voulais contrôler la taille de la police, car les étiquettes se chevauchaient dans example2.png. L'exemple de Brian Diggs l'a résolu parfaitement dans ce cas, mais vous avez raison de dire que l'approche que vous suggérez pourrait être plus utile, puisque la taille de la police devrait être la même dans chaque figure. – Mikko

2

Il suffit de modifier l'attribut pointsize de png. Par exemple:

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