Modifier les polices de caractères dans ggplot2

je cherche un moyen de modifier les types de police dans ggplot. Pour le moment, je serais assez heureux de simplement changer les polices à la famille de polices 'courier', mais en fin de compte Mon but est d'appeler un modèle de police personnalisé--toute entrée sur ce dernier point serait très appréciée.

j'ai fait un peu de devoirs, en regardant les articles suivants:

  • ggplot2: comment changer la police des étiquettes dans geom_text
  • R De Nouvelles Volume 6/2 , Polices non Standard en PostScript et PDF Graphic, Murrell et Ripley.
  • Police ComputerModern en graphics ggplot2?

c'est peut-être parce que je suis encore un amateur désespéré avec ggplot2, mais je n'ai même pas été capable de changer les polices de cartes à courrier. Toute aide? J'ai inclus les données pour le graphique en question, ci-dessous, avec l' code, donc j'espère que cela est assez facile à suivre.

56
demandé sur ROMANIA_engineer 2010-11-04 08:21:27

7 réponses

je pense que votre réponse est bonne 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"))
29
répondu Steve Powell 2013-06-10 22:32:44

a trié ma requête avec un minimum de tracas. C'était une solution en deux étapes que je n'aurais pas trouvée sans suivre les conseils des membres qui ont répondu.

pour changer le texte par défaut de ggplot, j'ai adapté le code auquel Brandon m'a référé à:

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

où John Dunavent crée une fonction, theme_min, qui peut être modifié pour fournir les options par défaut pour un ggplot, y compris l'utilisation de polices importées 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(),
    strip.background = theme_rect(fill=NA, colour=NA),
    strip.text.x = theme_text(hjust=0),
    strip.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) 

maladroitement, il n'y a aucun moyen (que j'ai trouvé) de modifier de façon générique les paramètres de police pour les objets geom_text avant qu'une parcelle ne soit créée. La solution de James ci-dessus fonctionnait parfaitement pour cela, cependant. Au lieu d'utiliser une police standard, j'ai défini fontfamily="F" pour introduire la police personnalisée que j'ai sélectionnée. dans theme_min(), c'est à dire:

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

espérons que cela soit utile à tous les autres utilisateurs qui cherchent à modifier des polices sur leurs graphiques.

bravo à tous ceux qui m'ont aidé à démêler! Aaron

25
répondu Aaron 2010-11-05 08:06:19

Avoir un coup d'oeil à la famille argument 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"))
11
répondu Thierry 2010-11-04 11:10:13

Inspiré par un post sur kohske 's blog j'ai trouvé 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 rejetterais la réponse préférée:

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

Je ne sais pas ce que cela signifie. On ne m'a pas non plus offert de lien pour commenter cette réponse; peut-être que quelque chose a changé sur le site.

5
répondu Neil Best 2017-05-23 12:25:23

, 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 que vous ayez produit votre intrigue originale.

2
répondu James 2010-11-04 11:32:36

également vérifier le paquet Cairo, qui a le soutien pour complètement commutation de toutes les polices avec ceux de votre choix. http://rforge.net/doc/packages/Cairo/00Index.html

0
répondu Jeff 2010-11-04 12:37:57

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

quelques données de jeu en df, et transformé en un graphe simple, "p", avec de longues étiquettes X et y, de sorte que nous pouvons 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 quelle que soit cette police:

p 

maintenant, on passe à Optima, en ajoutant un joli titre et un sous-titre à bask in the glory of 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

graph in optima font

0
répondu tim 2017-09-12 00:47:02