Изменение шрифта текста ggplot?

#r #ggplot2

#r #ggplot2

Вопрос:

Итак, я пытаюсь изменить шрифт в ggplot заголовка и меток моего графика. Я хочу установить шрифт на calibri, но независимо от того, что я делаю, я продолжаю получать следующее сообщение об ошибке:

 1: In grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y,  :
  font family 'Calibri' not found, will use 'sans' instead
 

Я сделал следующее, чтобы попытаться загрузить шрифты

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

Но когда я создаю график, используя следующий код, я получаю сообщение об ошибке

 churchplot <- ggplot(church, aes(x = year, y = Great.deal.Quite.a.lot, color = Great.deal.Quite.a.lot))   geom_line(size = 1.5, color = "palegreen4")  
   theme(axis.line = element_blank(),
        panel.grid.minor.x = element_blank(),
        panel.grid.major.x = element_blank(),
        panel.grid.major.y = element_line(color = "gray85"),
        panel.border = element_blank(),
        panel.background = element_blank())  
  geom_hline(aes(yintercept = 0), size = .5)  
  expand_limits(y = 0)  
  scale_y_continuous(expand = c(NA, 0), limits = c(0, 85))  
  theme(axis.text.x = element_text(vjust = 1, size = 11),
        axis.text.y = element_text(size = 11),
        axis.title.x = element_text(vjust = -1, hjust = .01 ,size = 15),
        plot.title = element_text(size = 16, face = "bold"))  
  ggtitle("Trust in the Church and Organized Religion")  
  ylab("")  
  xlab("Year")  
  labs(color = "Trust in Church")  
  annotate(geom="text", x = 2011, y = 58, label = "Title",
           color="forestgreen", size = 5, fontface = "bold", family = "Calibri")
churchplot
 
 dput(church)
structure(list(year = c(2020L, 2019L, 2018L, 2017L, 2016L, 2015L, 
2014L, 2013L, 2012L, 2011L, 2010L, 2009L, 2008L, 2007L, 2006L, 
2005L, 2004L, 2003L, 2002L, 2001L, 2000L, 1999L, 1998L, 1997L, 
1996L, 1995L, 1994L, 1993L, 1991L, 1991L, 1990L, 1989L, 1988L, 
1987L, 1986L, 1985L, 1984L, 1983L, 1981L, 1979L, 1977L, 1975L, 
1973L), Great.deal = c(25L, 21L, 20L, 23L, 20L, 25L, 25L, 25L, 
25L, 25L, 25L, 29L, 26L, 24L, 28L, 31L, 26L, 27L, 26L, 32L, 28L, 
32L, 34L, 35L, 30L, 32L, 29L, 29L, 31L, 33L, 33L, 30L, 35L, 35L, 
34L, 42L, 41L, 39L, 40L, 40L, 38L, 44L, 43L), Quite.a.lot = c(17L, 
15L, 18L, 18L, 21L, 17L, 20L, 23L, 19L, 23L, 23L, 23L, 22L, 22L, 
24L, 22L, 27L, 23L, 19L, 28L, 28L, 26L, 25L, 21L, 27L, 25L, 25L, 
24L, 25L, 26L, 23L, 22L, 24L, 26L, 23L, 24L, 23L, 23L, 24L, 25L, 
26L, 24L, 22L), Some = c(31L, 36L, 33L, 29L, 31L, 32L, 29L, 32L, 
29L, 29L, 30L, 29L, 31L, 30L, 26L, 28L, 28L, 30L, 32L, 24L, 26L, 
28L, 26L, 28L, 27L, 28L, 29L, 29L, 27L, 26L, 26L, 26L, 27L, 28L, 
27L, 21L, 22L, 26L, 20L, 21L, 20L, 20L, 21L), Very.little = c(23L, 
25L, 24L, 25L, 24L, 20L, 20L, 17L, 22L, 20L, 18L, 14L, 15L, 21L, 
19L, 16L, 15L, 17L, 18L, 13L, 14L, 12L, 12L, 12L, 13L, 11L, 14L, 
14L, 12L, 12L, 14L, 17L, 11L, 10L, 12L, 11L, 13L, 9L, 11L, 11L, 
13L, 9L, 7L), None..vol.. = c(3L, 4L, 3L, 3L, 3L, 3L, 4L, 2L, 
4L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 1L, 1L, 2L, 
2L, 2L, 2L, 3L, 2L, 1L, 2L, 3L, 2L, 1L, 3L, 1L, NA, 1L, 5L, 1L, 
1L, 1L, 4L), No.opinion = c(1L, 0L, 2L, 2L, 1L, 2L, 2L, 2L, 1L, 
1L, 2L, 2L, 3L, 2L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 2L, 1L, 
2L, 1L, 1L, 3L, 2L, 2L, 3L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 2L, 3L, 
2L, 2L), Great.deal.Quite.a.lot = c(42L, 36L, 38L, 41L, 41L, 
42L, 45L, 48L, 44L, 48L, 48L, 52L, 48L, 46L, 52L, 53L, 53L, 50L, 
45L, 60L, 56L, 58L, 59L, 56L, 57L, 57L, 54L, 53L, 56L, 59L, 56L, 
52L, 59L, 61L, 57L, 66L, 64L, 62L, 64L, 65L, 64L, 68L, 65L)), class = "data.frame", row.names = c(NA, 
-43L))
 

Ответ №1:

Это работает для меня :

 #install.packages('extrafont')
library(extrafont)
library(ggplot2)

font_import() #Import all fonts

ggplot(mtcars, aes(mpg, disp))   
  geom_point()  
  annotate(geom="text", x = 30, y = 200, label = "This is Title", 
         color="forestgreen",size = 5, fontface = "bold", family="Comic Sans MS")
 

введите описание изображения здесь

Чтобы узнать все доступные шрифты, вы можете использовать fonts() функцию.

 fonts()

#  [1] "CM Roman"                "CM Roman Asian"          "CM Roman CE"         
#  [4] "CM Roman Cyrillic"       "CM Roman Greek"          "CM Sans"             
#  [7] "CM Sans Asian"           "CM Sans CE"              "CM Sans Cyrillic"
# [10] "CM Sans Greek"           "CM Symbol"               "CM Typewriter"         
# [13] "CM Typewriter Asian"     "CM Typewriter CE"        "CM Typewriter Cyrillic"
# [16] "CM Typewriter Greek"     ".SF Compact Rounded"     ".Keyboard"            
# [19] ".New York"               ".SF Compact"             "System Font"         
# [22] ".SF NS Mono"             ".SF NS Rounded"          "Academy Engraved LET"
# [25] "Andale Mono"             "Apple Braille"           "AppleMyungjo"   
#...       
#...
 

Комментарии:

1. Когда я использую fonts() Calibri, появляется, но я все равно получаю то же сообщение об ошибке, когда пытаюсь его использовать. Я получаю ту же ошибку, когда по какой-то причине использую любой шрифт, кроме базового three или Georgia

2. Конечно, я не пытаюсь сохранить в формате pdf или что-то в этом роде

3. @SarahSmith Использование вашего кода и данных отлично работает для меня без каких-либо ошибок family = "Comic Sans MS" (у меня нет шрифта «Calibri»). Я думаю, у вас может возникнуть проблема с установкой. Перезапустите R, снова установите пакет install.packages('extrafont') и снова запустите свой код и посмотрите, изменится ли что-нибудь.

4. Хорошо, когда я перезапустил R, это сработало, я понятия не имею, что происходит, но спасибо за вашу помощь!