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.
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"))
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
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"))
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.
, 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.
é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
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