ggsave() не выделяет текст и меняет шрифт всего текста вместо простого заголовка
Я делаю диаграмму в ggplot2 и ggsave()
не делает то, что я ожидаю.
require(ggplot2)
require(showtext)
showtext_auto()
hedFont <- "Pragati Narrow"
font_add_google(
name = hedFont,
family = hedFont,
regular.wt = 400,
bold.wt = 700
)
chart <- ggplot(
data = cars,
aes(
x = speed,
y = dist
)
) +
geom_point() +
labs(
title = "Here is a title",
subtitle = "Subtitle here"
) +
theme(
plot.title = element_text(
size = 20,
family = hedFont,
face = "bold"
),
axis.title = element_text(
face = "bold"
)
)
ggsave(
filename = "myplot",
plot = chart,
device = "png",
path = "~/Desktop",
width = 300,
height = 200,
units = "mm",
dpi = 72
)
Я ожидал, что заголовок диаграммы будет иметь собственный шрифт. Вместо, ggsave()
делает диаграмму, где весь текст имеет шрифт. Я ожидал, что названия осей будут жирными, но это не так.
Вот что я вижу в программе просмотра RStudio, когда запускаю ggplot()
код в нем.
Вот что ggsave()
производит.
я хочу ggsave()
создать диаграмму, в которой шрифт имеет только заголовок диаграммы, а заголовки осей выделены жирным шрифтом.
ОБНОВЛЕНИЕ: я попробовал предложение Тунга. Я загрузил Google Font на свой компьютер. Вот мой новый код.
font_import(
paths = "/usr/share/fonts/truetype/google-fonts/",
recursive = T,
prompt = F,
pattern = "Pragati"
)
loadfonts(device = "pdf")
loadfonts(device = "postscript")
myFont <- "Pragati Narrow"
chart <- ggplot(
data = cars,
aes(
x = speed,
y = dist
)
) +
geom_point() +
labs(
title = "Here is a title",
subtitle = "Subtitle here"
) +
theme(
plot.title = element_text(
size = 20,
family = myFont,
face = "bold"
),
axis.title = element_text(
face = "bold"
)
)
ggsave(
filename = "myplot2.png",
plot = chart,
device = "png",
path = "~/Desktop",
width = 300,
height = 200,
units = "mm",
dpi = 72
)
Кажется, ничего не изменилось.
Я не вижу ошибок или предупреждений в консоли RStudio.
3 ответа
Это работало на моей машине Linux Mint Rosa. Вам необходимо скачать и импортировать нужный шрифт в extrafont
база данных за этот ответ
library(extrafont)
library(ggplot2)
hedFont <- "BitstreamVeraSansMono"
chart <- ggplot(
data = cars,
aes(
x = speed,
y = dist
)
) +
geom_point() +
labs(
title = "Here is a title",
subtitle = "Subtitle here"
) +
theme(
plot.title = element_text(
size = 20,
family = hedFont,
face = "bold"
),
axis.title = element_text(
face = "bold"
)
)
chart
ggsave(
filename = "./output/myplot.png",
plot = chart,
type = "cairo",
height = 4,
width = 6,
dpi = 150)
У меня была аналогичная проблема с использованием пакета, где указанный шрифт отображался в средстве просмотра RStudio, но менялся при сохранении в виде файла.
.png
с
ggsave()
. Ни один из приведенных выше ответов не работал у меня (шрифт уже был сохранен в моем
extrafont
базу данных и указать
base_family
не работал).
Я смог заставить его работать, просто удалив
ragg
пакет с использованием
installr::uninstall.packages("ragg")
.
Я не знаю, почему это работает, если у кого-нибудь есть какие-либо объяснения этому, мне было бы интересно услышать.
Здесь я также даю решение showtext.
Короткая версия: добавить theme_grey(base_family = "sans")
к ggplot
заявление, а ниже - результат, как и ожидалось.
chart <- ggplot(data = cars, aes(x = speed, y = dist)) +
geom_point() +
labs(title = "Here is a title", subtitle = "Subtitle here") +
theme_grey(base_family = "sans") +
theme(
plot.title = element_text(
size = 20,
family = hedFont,
face = "bold"
),
axis.title = element_text(
face = "bold"
)
)
Длинная версия: когда базовое семейство не указано в ggplot
, showtext
по умолчанию используется семейство шрифтов WenQuanYi MicroHei для поддержки символов CJK. Однако в этом семействе нет шрифта, выделенного жирным шрифтом, поэтому в исходном коде заголовок оси отображался обычным шрифтом. Я бы предложил всегда устанавливать par(family = "sans")
на базовых участках и theme_grey(base_family = "sans")
в ggplot
участки.
Как примечание стороны, это не означает, что showtext
не может использоваться внутри RStudio. Ты можешь позвонить x11()
или так, чтобы открыть окно и showtext
должно хорошо с ним работать.