Comment augmenter la taille de la police dans un tracé en R?

147

Je suis confus. Quelle est la bonne façon d'augmenter la taille de la police du texte dans le titre, les étiquettes et autres endroits d'un tracé?

Par exemple

x <- rnorm(100)
hist(x, xlim=range(x), xlab= "Variable Label", 
     ylab="density", main="Title of plot", prob=TRUE, ps=30)

L' psargument ne change pas la taille de la police (mais il dit dans l'aide R pour ?parcela qu'il s'agit de "la taille en points du texte (mais pas des symboles)".

Est-il également possible de séparer la modification de la taille de la police de la fonction de traçage telle que hist?

Tim
la source
Reproduction possible de Comment changer la taille d'étiquette d'un tracé R
Waldir Leoncio

Réponses:

140

Vous voulez quelque chose comme l' cex=1.5argument pour mettre les polices à l'échelle de 150%. Mais ne voyez help(par)comme il y a aussi cex.lab, cex.axis...

Dirk Eddelbuettel
la source
1
Merci! Quelle est la différence avec "ps = 1,5"?
Tim du
5
pourquoi cex = 1.5 ne fonctionne pas? Mais faut-il spécifier pour chaque partie en termes de cex.lab, cex.axis, cex.main? À quoi sert cex = 1,5?
Tim
2
Avez-vous lu help(par)quelque chose ps? Pour autant que je sache, cela ne semble pas lié au texte.
Dirk Eddelbuettel
2
C'est comme ça, en partie sûrement pour la rétrocompatibilité avec les implémentations antérieures du langage S.
Dirk Eddelbuettel
3
cex est le facteur de grossissement. La valeur par défaut est 1. Si vous avez besoin de spécifier des tailles de police, vous feriez mieux d'être prêt à fouiller dans la documentation en commençant par? Devices,? PdfFonts,? Pdf,? EmbedFonts, et bien d'autres.
IRTFM
124

Ainsi, pour résumer la discussion existante, ajouter

cex.lab=1.5, cex.axis=1.5, cex.main=1.5, cex.sub=1.5

à votre tracé, où 1,5 pourrait être 2, 3, etc. et une valeur de 1 est la valeur par défaut augmentera la taille de la police.

x <- rnorm(100)

cex ne change pas les choses

hist(x, xlim=range(x),
     xlab= "Variable Lable", ylab="density", main="Title of plot", prob=TRUE)

hist(x, xlim=range(x),
     xlab= "Variable Lable", ylab="density", main="Title of plot", prob=TRUE, 
     cex=1.5)

entrez la description de l'image ici

Ajouter cex.lab = 1,5, cex.axis = 1,5, cex.main = 1,5, cex.sub = 1,5

hist(x, xlim=range(x),
     xlab= "Variable Lable", ylab="density", main="Title of plot", prob=TRUE, 
     cex.lab=1.5, cex.axis=1.5, cex.main=1.5, cex.sub=1.5)

entrez la description de l'image ici

Jeromy Anglim
la source
2
BTW, si vous essayez de modifier l'axe dans un graphique à barres (par exemple, pour le graphique d'importance variable dans randomForest ou GBM), vous devez utiliser cex.names(si vous êtes un humain qui lit les choses à partir d'une position verticale, vous pouvez également want las=2)
geneorama
22

Notez que " cex " change les choses lorsque le tracé est fait avec du texte. Par exemple, le tracé d'un clustering hiérarchique agglomératif:

library(cluster)
data(votes.repub)
agn1 <- agnes(votes.repub, metric = "manhattan", stand = TRUE)
plot(agn1, which.plots=2)

produira un tracé avec du texte de taille normale:

entrez la description de l'image ici

et plot(agn1, which.plots=2, cex=0.5)produira celui-ci:

entrez la description de l'image ici

OskrSaSi
la source
Travaillez faces2aussi (des visages de Chernoff )
Galled
Dans mon exemple, j'ai dû appliquer cex non pas pour tracer mais l'objet interne directement pour un effet:plot(ci(roc(data$a, data$b, auc=TRUE, of="auc", print.auc=TRUE, print.auc.cex=1.5, plot=TRUE), of="thresholds", thresholds="best")))
Tapper
21

Par essais et erreurs, j'ai déterminé que ce qui suit est nécessaire pour définir la taille de la police:

  1. cexne fonctionne pas hist(). A utiliser cex.axispour les nombres sur les axes, cex.labpour les étiquettes.
  2. cexne fonctionne pas non axis()plus. Utilisez cex.axispour les nombres sur les axes.
  3. Au lieu de définir des étiquettes à l'aide de hist(), vous pouvez les définir à l'aide de mtext(). Vous pouvez définir la taille de la police en utilisant cex, mais en utilisant une valeur de 1 , la police est en fait 1,5 fois la valeur par défaut !!! Vous devez utiliser cex=2/3pour obtenir la taille de police par défaut. À tout le moins, c'est le cas sous R 3.0.2 pour Mac OS X, en utilisant la sortie PDF.
  4. Vous pouvez modifier la taille de police par défaut pour la sortie PDF en utilisant pointsizedans pdf().

Je suppose qu'il serait beaucoup trop logique de s'attendre à ce que R (a) fasse réellement ce que sa documentation dit qu'il devrait faire, (b) se comporte d'une manière attendue.

Vagabond urbain
la source
2

Je suis tombé sur cela lorsque je voulais réduire les étiquettes des axes, mais laisser tout le reste de la même taille. La commande qui a fonctionné pour moi était de mettre:

par(cex.axis=0.5)

Avant la commande plot. N'oubliez pas de mettre:

par(cex.axis=1.0)

Après le tracé pour vous assurer que les polices reviennent à la taille par défaut.

Ulysse Ithaque
la source
2

Pour être complet, en mettant à l'échelle le texte de 150% avec cex = 1.5, voici une solution complète:

cex <- 1.5
par(cex.lab=cex, cex.axis=cex, cex.main=cex)
plot(...)
par(cex.lab=1, cex.axis=1, cex.main=1)

Je recommande d'emballer des choses comme celle-ci pour réduire le passe-partout, par exemple:

plot_cex <- function(x, y, cex=1.5, ...) {
  par(cex.lab=cex, cex.axis=cex, cex.main=cex)
  plot(x, y, ...)
  par(cex.lab=1, cex.axis=1, cex.main=1)
  invisible(0)
}

que vous pouvez ensuite utiliser comme ceci:

plot_cex(x=1:5, y=rnorm(5), cex=1.3)

Les ...ellipses sont appelées dans R et sont utilisées pour transmettre des paramètres supplémentaires aux fonctions. Par conséquent, ils sont couramment utilisés pour le traçage. Ainsi, ce qui suit fonctionne comme prévu:

plot_cex(x=1:5, y=rnorm(5), cex=1.5, ylim=c(-0.5,0.5))
Adam Erickson
la source
1

Dans le cas où vous souhaitez augmenter la police des étiquettes de l'histogramme lors de la définition des étiquettes = TRUE

bp=hist(values, labels = FALSE, 
 main='Histogram',
 xlab='xlab',ylab='ylab',  cex.main=2, cex.lab=2,cex.axis=2)

text(x=bp$mids, y=bp$counts, labels=bp$counts ,cex=2,pos=3)
Yeinhorn
la source