Il était une fois, j'ai changé ma police ggplot2
en utilisant windowsFonts(Times=windowsFont("TT Times New Roman"))
pour la changer. Maintenant, je ne peux pas m'en sortir.
En essayant de définir family=""
dans ggplot2
theme()
, il semble impossible de générer un changement de polices car je compile le fichier MWE ci-dessous avec différentes familles de polices.
library(ggplot2)
library(extrafont)
loadfonts(device = "win")
a <- ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point() +
ggtitle("Fuel Efficiency of 32 Cars") +
xlab("Weight (x1000 lb)") + ylab("Miles per Gallon") +
theme(text=element_text(size=16,
# family="Comic Sans MS"))
# family="CM Roman"))
# family="TT Times New Roman"))
# family="Sans"))
family="Serif"))
print(a)
print("Graph should have refreshed")
R renvoie un avertissement font family not found in Windows font database
, mais un tutoriel que je suivais (si je peux le retrouver, je mettrai à jour le lien ici) et qui indique que ceci est normal et ne pose pas de problème. En outre, cela a fonctionné à un moment donné parce que mon graphique utilisait autrefois des polices de type arial ou helvitica. Je pense que cela a toujours été un avertissement, même pendant la migration initiale.
MISE À JOUR
quand je lance windowsFonts()
ma sortie est
$ serif [1] "TT Times New Roman"
$ sans [1] "TT Arial"
$ mono [1] "TT Courier New"
Mais, ceci est après avoir exécuté font_import()
, je ne peux donc que conclure que mes polices ne sont pas enregistrées au bon endroit. Le code qui a exécuté la demande font_import()
charge en fait les bibliothèques avec:
LocalLibraryLocation <- paste0("C:\\Users\\",Sys.getenv("USERNAME"),"\\Documents","\\R\\win-library\\3.2");
.libPaths(c(LocalLibraryLocation, .libPaths()))
Vous venez de manquer une étape d'initialisation, je pense.
Vous pouvez voir les polices disponibles avec la commande windowsFonts()
. Par exemple, le mien ressemble à ceci quand j'ai commencé à regarder ceci:
> windowsFonts()
$serif
[1] "TT Times New Roman"
$sans
[1] "TT Arial"
$mono
[1] "TT Courier New"
Après avoir installé le paquet extraFont et lancé font_import
comme ceci (cela a pris 5 minutes):
library(extrafont)
font_import()
loadfonts(device = "win")
J'en avais beaucoup plus disponible - trop discutable, certainement trop pour être énuméré ici.
Ensuite, j'ai essayé votre code:
library(ggplot2)
library(extrafont)
loadfonts(device = "win")
a <- ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point() +
ggtitle("Fuel Efficiency of 32 Cars") +
xlab("Weight (x1000 lb)") + ylab("Miles per Gallon") +
theme(text=element_text(size=16, family="Comic Sans MS"))
print(a)
donnant ceci:
Vous pouvez trouver le nom d'une police dont vous avez besoin pour le paramètre family
de element_text
avec l'extrait de code suivant:
> names(wf[wf=="TT Times New Roman"])
[1] "serif"
Puis:
library(ggplot2)
library(extrafont)
loadfonts(device = "win")
a <- ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point() +
ggtitle("Fuel Efficiency of 32 Cars") +
xlab("Weight (x1000 lb)") + ylab("Miles per Gallon") +
theme(text=element_text(size=16, family="serif"))
print(a)
Une autre option consiste à utiliser showtext
un package prenant en charge plusieurs types de polices (TrueType, OpenType, Type 1, polices Web, etc.) et plusieurs périphériques graphiques, et évite d'utiliser un logiciel externe tel que Ghostscript.
# install.packages('showtext', dependencies = TRUE)
library(showtext)
Importer des polices Google
# https://fonts.google.com/featured/Superfamilies
font_add_google("Montserrat", "Montserrat")
font_add_google("Roboto", "Roboto")
Chargez la police à partir du chemin de recherche actuel dans showtext
# Check the current search path for fonts
font_paths()
#> [1] "C:\\Windows\\Fonts"
# List available font files in the search path
font_files()
#> [1] "AcadEref.ttf"
#> [2] "AGENCYB.TTF"
#> [428] "pala.ttf"
#> [429] "palab.ttf"
#> [430] "palabi.ttf"
#> [431] "palai.ttf"
# syntax: font_add(family = "<family_name>", regular = "/path/to/font/file")
font_add("Palatino", "pala.ttf")
font_families()
#> [1] "sans" "serif" "mono" "wqy-microhei"
#> [5] "Montserrat" "Roboto" "Palatino"
## automatically use showtext for new devices
showtext_auto()
Tracé: nécessité d'ouvrir le périphérique graphique Windows car showtext
ne fonctionne pas bien avec le périphérique graphique intégré RStudio
# https://github.com/yixuan/showtext/issues/7
# https://journal.r-project.org/archive/2015-1/qiu.pdf
windows()
myFont1 <- "Montserrat"
myFont2 <- "Roboto"
myFont3 <- "Palatino"
library(ggplot2)
a <- ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point() +
ggtitle("Fuel Efficiency of 32 Cars") +
xlab("Weight (x1000 lb)") + ylab("Miles per Gallon") +
theme(text = element_text(size = 16, family = myFont1)) +
annotate("text", 4, 30, label = 'Palatino Linotype',
family = myFont3, size = 10) +
annotate("text", 1, 11, label = 'Roboto', hjust = 0,
family = myFont2, size = 10)
## On-screen device
print(a)
## Save to PNG
ggsave("plot_showtext.png", plot = a,
type = 'cairo',
width = 6, height = 6, dpi = 150)
## Save to PDF
ggsave("plot_showtext.pdf", plot = a,
device = cairo_pdf,
width = 6, height = 6, dpi = 150)
## turn showtext off if no longer needed
showtext_auto(FALSE)
En retard pour la fête, mais cela pourrait intéresser les personnes cherchant à ajouter des polices personnalisées à leur ggplots
dans une application shiny
sur shinyapps.io.
Vous pouvez:
www
: par exemple. IndieFlower.ttf
de iciCela conduit à la section supérieure suivante du fichier app.R
:
dir.create('~/.fonts')
file.copy("www/IndieFlower.ttf", "~/.fonts")
system('fc-cache -f ~/.fonts')
Un exemple complet d'application peut être trouvé ici .