Wednesday 20 November 2019

r - Changing fonts in ggplot2



Once upon a time, I changed my ggplot2 font using using windowsFonts(Times=windowsFont("TT Times New Roman")) to change it. Now I can't get it off of this.



In trying to set family="" in ggplot2 theme() I can't seem to generate a change in fonts as I compile the MWE below with different font families.




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 is returning a warning font family not found in Windows font database, but there was a tutorial I was following (if I can find it again I will update the link here) that said this was normal and not a problem. Also, somehow this worked at one point because my graph once used some arial or helvitica type font. I think this has always been a present warning even during the initial times migration.




UPDATE



when I run windowsFonts() my output is




$serif [1] "TT Times New Roman"



$sans [1] "TT Arial"




$mono [1] "TT Courier New"




But, this is after I ran font_import() so I can only conclude that my fonts are not being saved in the right place. The code that ran the font_import() request actually loads the libraries with:



LocalLibraryLocation <- paste0("C:\\Users\\",Sys.getenv("USERNAME"),"\\Documents","\\R\\win-library\\3.2");
.libPaths(c(LocalLibraryLocation, .libPaths()))

Answer



You just missed an initialization step I think.




You can see what fonts you have available with the command windowsFonts(). For example mine looks like this when I started looking at this:



> windowsFonts()
$serif
[1] "TT Times New Roman"

$sans
[1] "TT Arial"


$mono
[1] "TT Courier New"


After intalling the package extraFont and running font_import like this (it took like 5 minutes):



library(extrafont)
font_import()
loadfonts(device = "win")



I had many more available - arguable too many, certainly too many to list here.



Then I tried your 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)


yielding this:



enter image description here






You can find the name of a font you need for the family parameter of element_text with the following code snippet:



> names(wf[wf=="TT Times New Roman"])
[1] "serif"


And then:




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)



yields:
enter image description here


No comments:

Post a Comment

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...