曾几何时,我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")
Run Code Online (Sandbox Code Playgroud)
R正在返回一个警告font family not found in Windows font database,但有一个我正在关注的教程(如果我能再次找到它,我将在这里更新链接)说这是正常的而不是问题.此外,这在某种程度上起作用,因为我的图表曾经使用过一些arial或helvitica类型的字体.我认为即使在最初的迁移期间,这也始终是一个警告.
UPDATE
当我运行windowsFonts()我的输出是
$ serif [1]"TT Times …
我正在 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( …Run Code Online (Sandbox Code Playgroud) 我在 R 环境中导入字体时遇到了一些问题。我的最终目标是将我公司的自定义字体(.ttf 文件)R 包含在 ggplot 和 RMarkdown 中。我尝试分解问题并注意到导入常规 Windows 字体时出现同样的问题。导入不会引发任何错误,但字体不可用于绘图。我正在使用在 Windows 10 Pro 1803 上运行的 R 版本 3.5.1。
我已经尝试使用 extrafont 包以及使用 showtext 包导入 Windows 字体。我还尝试将所有 Windows ttf 文件从 C:\WINDOWS\Fonts 手动复制到 C:\Users...\Documents\R\R-3.5.1\library\extrafontdb\metrics ,同样的问题仍然存在。
下面是一些带有抛出错误的 R 基础数据集的代码块:
library(ggplot2)
library(extrafont)
font_import()
# Only three fonts seem to have been imported...
loadfonts(); windowsFonts()
#$`serif`
#[1] "TT Times New Roman"
#$sans
#[1] "TT Arial"
#$mono
#[1] "TT Courier New"
ggplot(data = esoph) +
aes(x = agegp, weight = ncases) +
geom_bar() +
ggtitle("This is …Run Code Online (Sandbox Code Playgroud)