Смена шрифтов в ggplot2
Однажды я изменил свой ggplot2
шрифт с использованием windowsFonts(Times=windowsFont("TT Times New Roman"))
изменить это. Теперь я не могу от этого избавиться.
В попытке установить family=""
в ggplot2
theme()
Я не могу генерировать изменения в шрифтах, так как я компилирую MWE ниже с различными семействами шрифтов.
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 возвращает предупреждение font family not found in Windows font database
, но был учебник, которому я следовал (если я смогу найти его снова, я обновлю ссылку здесь), в котором говорилось, что это нормально и не проблема. Кроме того, как-то это сработало в какой-то момент, потому что мой график когда-то использовал какой-то шрифт типа arial или helvitica. Я думаю, что это всегда было настоящим предупреждением даже во время начальной миграции.
ОБНОВИТЬ
когда я бегу windowsFonts()
мой вывод
$ serif [1] "TT Times New Roman"
$ sans [1] "TT Arial"
$ mono [1] "TT Courier New"
Но это после того, как я побежал font_import()
поэтому я могу только заключить, что мои шрифты не сохраняются в нужном месте. Код, который запускал font_import()
запрос на самом деле загружает библиотеки с:
LocalLibraryLocation <- paste0("C:\\Users\\",Sys.getenv("USERNAME"),"\\Documents","\\R\\win-library\\3.2");
.libPaths(c(LocalLibraryLocation, .libPaths()))
7 ответов
Вы просто пропустили шаг инициализации, я думаю.
Вы можете увидеть, какие шрифты у вас есть с помощью команды windowsFonts()
, Например мой выглядит так, когда я начал смотреть на это:
> windowsFonts()
$serif
[1] "TT Times New Roman"
$sans
[1] "TT Arial"
$mono
[1] "TT Courier New"
После установки пакета extraFont и запуска font_import
вот так (прошло около 5 минут):
library(extrafont)
font_import()
loadfonts(device = "win")
У меня было много более доступным - спорно, слишком много, конечно, слишком много, чтобы перечислить здесь.
Тогда я попробовал ваш код:
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)
получая это:
Обновить:
Вы можете найти название шрифта, который вам нужен для family
параметр element_text
со следующим фрагментом кода:
> names(wf[wf=="TT Times New Roman"])
[1] "serif"
А потом:
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)
Другой вариант заключается в использовании showtext
пакет, который поддерживает больше типов шрифтов (TrueType, OpenType, Type 1, веб-шрифты и т. д.) и больше графических устройств, и избегает использования внешнего программного обеспечения, такого как Ghostscript.
# install.packages('showtext', dependencies = TRUE)
library(showtext)
Импортируйте некоторые шрифты Google
# https://fonts.google.com/featured/Superfamilies
font_add_google("Montserrat", "Montserrat")
font_add_google("Roboto", "Roboto")
Загрузить шрифт из текущего пути поиска в 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()
Сюжет: нужно открыть графическое устройство Windows как showtext
не работает со встроенным графическим устройством 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)
Простой ответ, если не хочешь устанавливать ничего нового
Чтобы изменить все шрифты в вашем сюжете plot + theme(text=element_text(family="mono"))
где mono
выбранный вами шрифт.
Список вариантов шрифта по умолчанию:
- мононуклеоз
- без
- засечки
- Курьер
- Helvetica
- Раз
- AvantGarde
- Книжник
- Helvetica-Narrow
- NewCentury Учебник
- Палатино
- URW Готика
- URWBookman
- NimbusMon
- URWHelvetica
- NimbusSan
- НимбусСанКонд
- CenturySch
- URWPalladio
- URWTimes
- НимбусРом
R не имеет большого охвата шрифтов, и, как указывает Майк Уайз, R использует разные имена для общих шрифтов.
На этой странице подробно рассматриваются шрифты по умолчанию.
Позднее на вечеринке, но это может быть интересно тем, кто хочет добавить свои шрифты в свои ggplots
внутри shiny
приложение на shinyapps.io.
Вы можете:
- Поместить пользовательский шрифт в
www
каталог: напримерIndieFlower.ttf
отсюда - Следуйте инструкциям отсюда
Это приводит к следующему верхнему разделу внутри app.R
файл:
dir.create('~/.fonts')
file.copy("www/IndieFlower.ttf", "~/.fonts")
system('fc-cache -f ~/.fonts')
Полный пример приложения можно найти здесь.
Чтобы изменить шрифт глобально для графиков ggplot2.
theme_set(theme_gray(base_size = 20, base_family = 'Font Name' ))
В Windows изменить шрифт очень просто. Вам не нужны никакие дополнительные пакеты; всего пара строк кода.
Предположим, вы хотите изменить шрифт без засечек по умолчанию с Arial на Calibri. Это можно сделать следующим образом, и шрифт должен появиться во всех создаваемых вами ggplots:
windowsFonts(sans = windowsFont("Calibri"))
Когда вы сохраняете свой ggplot с помощью ggsave, шрифт должен появиться в сохраненном файле.
Вместо использования «sans» вы также можете добавить в этот список свой собственный шрифт, хотя вам придется отредактировать текстовые элементы вашей темы ggplot, чтобы включить новый шрифт.
Если вы используете svglite для создания файла SVG, вам также необходимо указать выбранный вами шрифт. Например:
ggsave("MyPlot.svg", system_fonts = list("sans" = "Calibri"))
Я исправил свою проблему с geom_text, не применяя команду family="Roboto" в уценке R, убедившись, что в заголовке Yaml есть theme: null. Ранее он был установлен на «страницу» и, как ни странно, переопределял только строку geom_text...