R语言 在ggplot2中更改字体

cygmwpex  于 2023-04-18  发布在  其他
关注(0)|答案(7)|浏览(442)

以前,我用windowsFonts(Times=windowsFont("TT Times New Roman"))改变了我的ggplot2字体。现在,我不能把它从这个上面取下来。
在尝试在ggplot2theme()中设置family=""时,我似乎无法生成字体更改,因为我使用不同的字体家族编译了下面的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快递新”
但是,这是在我运行font_import()之后,所以我只能得出结论,我的字体没有保存在正确的位置。运行font_import()请求的代码实际上加载了库:

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

dwbf0jvd1#

我想你刚刚错过了一个初始化步骤。
你可以用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)

得到:

更新:

您可以使用以下代码片段找到element_textfamily参数所需的字体名称:

> 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)

产量:

zvokhttg

zvokhttg2#

另一种选择是使用showtext包,它支持更多类型的字体(TrueType,OpenType,Type 1,Web字体等)和更多的图形设备,并避免使用外部软件,如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
# `x11()` on Linux, or `quartz()` on Mac OS
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)

编辑:在RStudio中使用showtext的另一种解决方法。在R会话开始时运行以下代码(源代码)

trace(grDevices::png, exit = quote({
    showtext::showtext_begin()
}), print = FALSE)

编辑2:从0.9版本开始,showtext可以很好地与RStudio图形设备(RStudioGD)配合使用,只需在RStudio会话中调用showtext_auto()即可正确显示图。

zzoitvuj

zzoitvuj3#

如果你不想安装任何新的东西,一个简单的答案

更改绘图中的所有字体plot + theme(text=element_text(family="mono"))其中mono是您选择的字体。

默认字体选项列表:

  • 单声道
  • 衬线
  • 信使
  • Helvetica
  • 时代
  • 前卫
  • 布克曼
  • Helvetica-窄
  • 新世纪教科书
  • 帕拉蒂诺
  • URW哥特式
  • URWBookman
  • 宁布斯蒙
  • URW字体
  • NimbusSan
  • NimbusSanCond
  • 世纪
  • 帕拉迪奥
  • URWTimes
  • NimbusRom

R没有很好的字体覆盖率,正如Mike Wise所指出的,R对常见字体使用不同的名称。
This page详细介绍了默认字体。

wfypjpf4

wfypjpf44#

这可能会对那些希望在shinyapps.io上的shiny应用程序中添加自定义字体的人感兴趣。
您可以:
1.将自定义字体放入www目录:例如IndieFlower.ttf来自here
1.从这里开始按步骤走
这将导致app.R文件中的以下上部:

dir.create('~/.fonts')
file.copy("www/IndieFlower.ttf", "~/.fonts")
system('fc-cache -f ~/.fonts')

完整的示例应用程序可以在这里找到。

ujv3wf0j

ujv3wf0j5#

全局更改ggplot2图的字体。

theme_set(theme_gray(base_size = 20, base_family = 'Font Name' ))
iyfamqjs

iyfamqjs6#

我修复了我的问题,geom_text没有在R markdown中应用family=“Roboto”命令,确保Yaml头有主题:null。它之前被设置为“page”,并且只覆盖了geom_text行,很奇怪...

ipakzgxi

ipakzgxi7#

在Windows中,改变字体非常容易,你不需要任何额外的软件包;只需要几行代码
假设您要将默认的sans serif字体从Arial更改为Calibri。以下代码将完成此操作,并且该字体应出现在您创建的任何ggplot中:

windowsFonts(sans = windowsFont("Calibri"))

使用ggsave保存ggplot时,字体应显示在保存的文件中。
除了使用“sans”,你还可以将自己的字体添加到这个列表中,尽管你必须编辑ggplot主题的文本元素来包含新字体。
如果您使用svglite创建SVG文件,则还需要指定所选字体。例如:

ggsave("MyPlot.svg", system_fonts = list("sans" = "Calibri"))

相关问题