Modification des fonts dans ggplot2

Je cherche un moyen de modifier les types de police dans ggplot. En ce moment, je serais assez heureux de simplement changer les fonts pour la famille de fonts «courrier», mais mon but ultime est d’appeler un modèle de police personnalisé – toute consortingbution sur ce dernier point serait très appréciée.

J’ai fait quelques devoirs en regardant les articles et articles suivants:

  • ggplot2: Comment changer la police des étiquettes dans geom_text
  • R News Volume 6/2 , Polices non standard en PostScript et PDF Graphic, Murrell et Ripley.
  • Police ComputerModern dans les graphiques ggplot2?

C’est peut-être parce que je suis toujours un amateur sans espoir avec ggplot2, mais je n’ai même pas été capable de changer de police graphique en courrier. De l’aide? J’ai inclus les données pour le graphique en question, ci-dessous, avec le code, alors j’espère que tout cela sera assez facile à suivre.

Je pense que votre réponse est correcte, mais vous pouvez le faire plus simplement:

 install.packages("extrafont");library(extrafont) font_import("Trebuchet MS") library(ggplot2) qplot(1:10)+theme(text=element_text(family="Trebuchet MS")) 

Trié ma requête avec des soucis assez minimes. C’était une solution en deux étapes à laquelle je n’aurais pas abouti sans suivre les conseils des membres qui ont répondu.

Pour modifier les valeurs par défaut du texte ggplot, j’ai adapté le code auquel Brandon m’a renvoyé à:

http://johndunavent.com/combined-line-and-bar-chart-ggplot2

Où John Dunavent crée une fonction, theme_min, qui peut être modifiée pour fournir les options par défaut pour un ggplot, y compris l’utilisation de fonts imscopes de Windows avec la commande windowsFonts. Mon adaptation de son code ressemble à ceci:

 theme_min = function (size=10, font=NA, face='plain', panelColor=backgroundColor, axisColor='#999999', gridColor=gridLinesColor, textColor='black') { theme_text = function(...) ggplot2::theme_text(family=font, face=face, colour=textColor, size=size, ...) opts( axis.text.x = theme_text(), axis.text.y = theme_text(), axis.line = theme_blank(), axis.ticks = theme_segment(colour=axisColor, size=0.25), panel.border = theme_rect(colour=backgroundColor), legend.background = theme_blank(), legend.key = theme_blank(), legend.key.size = unit(1.5, 'lines'), legend.text = theme_text(hjust=0), legend.title = theme_text(hjust=0), panel.background = theme_rect(fill=panelColor, colour=NA), panel.grid.major = theme_line(colour=gridColor, size=0.33), panel.grid.minor = theme_blank(), ssortingp.background = theme_rect(fill=NA, colour=NA), ssortingp.text.x = theme_text(hjust=0), ssortingp.text.y = theme_text(angle=-90), plot.title = theme_text(hjust=0), plot.margin = unit(c(0.1, 0.1, 0.1, 0.1), 'lines')) } ##Create a custom font type. Could be 'F', 'TEST', whatever windowsFonts(F = windowsFont('Wide Latin')) ##and insert this line of code into the original code I list above: + theme_min(font='F', size=10) 

Malhonnêtement, il n’y a aucun moyen (que j’ai trouvé) de modifier génériquement les parameters de police pour les objects geom_text avant la création d’un tracé. La solution de James ci-dessus a parfaitement fonctionné pour cela, cependant. Au lieu d’utiliser une police standard, je définis fontfamily = “F” pour introduire la police personnalisée que j’ai sélectionnée dans theme_min (), à savoir:

 grid.gedit("GRID.text",gp=gpar(fontfamily="F")) 

J’espère que cela est utile à tout autre utilisateur cherchant à modifier les fonts sur ses graphiques.

Bravo à tous ceux qui m’ont aidé à régler ce problème! Aaron

Jetez un coup d’oeil à l’argument de famille de theme_text ()

 dummy <- data.frame(A = rnorm(10), B = rnorm(10)) ggplot(dummy, aes(x = A, y = B)) + geom_point() #helvetica = default ggplot(dummy, aes(x = A, y = B)) + geom_point() + opts(axis.title.x = theme_text(family = "sans", face = "bold")) #times ggplot(dummy, aes(x = A, y = B)) + geom_point() + opts(axis.title.x = theme_text(family = "serif", face = "bold")) #courier ggplot(dummy, aes(x = A, y = B)) + geom_point() + opts(axis.title.x = theme_text(family = "mono", face = "bold")) 

Inspiré par un post sur le blog de kohske , je suis venu avec ceci:

 theme_set( theme_bw( base_family= "serif")) theme_update( panel.grid.minor= theme_blank(), panel.grid.major= theme_blank(), panel.background= theme_blank(), axis.title.x= theme_blank(), axis.text.x= theme_text( family= "serif", angle= 90, hjust= 1 ), axis.text.x= theme_text( family= "serif"), axis.title.y= theme_blank()) theme_map <- theme_get() theme_set( theme_bw()) 

Maintenant, quand je veux utiliser ce thème particulier:

 last_plot() + theme_map 

YMMV.

BTW, si j'avais le pouvoir je voterais la réponse préférée:

 > grid.gedit("GRID.text",gp=gpar(fontfamily="mono")) Error in editDLfromGPath(gPath, specs, ssortingct, grep, global, redraw) : 'gPath' (GRID.text) not found 

Pas sûr de ce que cela signifie. Je n'ai pas non plus offert de lien pour commenter cette réponse. peut-être que quelque chose a changé sur le site.

Vous pouvez définir la police des étiquettes produites par geom_text avec grid.gedit :

 grid.gedit("GRID.text",gp=gpar(fontfamily="mono")) 

Appelez cela après avoir produit votre tracé original.

Découvrez également le package Cairo, qui prend en charge le remplacement total de toutes les fonts par celles de votre choix. http://rforge.net/doc/packages/Cairo/00Index.html

Cela semble être la solution la plus simple, pour mon argent.

Certains lisent des données dans df et en font un simple graphique, “p”, avec de longs et longs libellés x et y, pour que nous puissions voir le changement de police:

 df <- data.frame(A = rnorm(10), B = rnorm(10)) p = ggplot(data = df, aes(x = A, y = B)) + geom_point() p = p + xlab("A long x-string so we can see the effect of the font switch") p = p + ylab("Likewise up the ordinate") 

Et nous voyons le tracé par défaut dans la police:

 p 

Maintenant, nous passons à Optima, en ajoutant un joli titre et un sous-titre pour profiter de la gloire d'Optima:

 label = "Now we switch to Optima" subtitle = "Optima is a nice font: https://en.wikipedia.org/wiki/Optima#Usages" 

Et après tout cela, nous imprimons dans la nouvelle police

 # the only line you need to read: p + theme(text = element_text(family = "Optima", , face = "bold")) p = p + ggtitle(label = label, subtitle = subtitle) p 

graphique en police optima