ggplot2에서 글꼴 변경


91

옛날 옛적에를 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()))

2
Windows 관련 질문과 답변입니까? 누구든지 Linux로 일반화하고 싶습니까?
smci

2
또한 windowsFonts3.4.1 이후 grDevices 에서 사라졌습니다 . 여기에있는 코드를 업데이트해야합니다.
smci

1
@smci : 이것이것을보십시오 . Linux에서 올바른 경로를 지정하기 만하면됩니다
Tung

답변:


124

제 생각에 초기화 단계를 놓쳤습니다.

명령으로 사용 가능한 글꼴을 볼 수 있습니다 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)

수율 : 여기에 이미지 설명 입력


도움을 주셔서 감사합니다. 이제 mono||sans(이것들은 지금까지 다르지 않은 것 같습니다)와 serif``, but not the actually name like "TT Times New Roman" , but additionally, I not sure that my loadFonts` 사이를 전환 할 수 있습니다 . 전화를 걸었을 때 fonts()거의 300 개의 글꼴 목록이 있지만 Windows 장치에 액세스 할 수 있도록 로컬 환경에 설치되지 않은 것 같습니다. 그것이 의미가 있는지 확실하지 않지만 도움이 될만한 스 니펫으로 원래 질문에 대한 업데이트를 제공하려고했습니다. 다시 한 번 감사드립니다!
EngBIRD 2015

이름 스 니펫 업데이트에 감사드립니다. 매우 도움이되었습니다. 가족이 내 설치에서 인식하는 유일한 문자열 인 경우 귀하의 만화가 Ms 예제가 올바른 모습을 어떻게 만들어 냈습니까?
EngBIRD 2015

운. 해당 글꼴 (및 다른 많은 글꼴)에서 성이 가족 값과 동일합니다. 그래서 wf[which(wf=="Comic Sans MS")]수익률$``Comic Sans MS`` [1] "Comic Sans MS"
Mike Wise

감사합니다. 특정 위치에서 글꼴을 지시하거나로드 할 수 있는지 알고 있습니까? 즉로드 글꼴을 설치하거나 글꼴을 지정하는 경우에도? 요약 디스플레이 호출을 반복 할 때 나는 ... 추가 창을 볼 수 글꼴을하지 않습니다
EngBIRD

font_import와 loadfonts ()를 바로 실행 했습니까?
Mike Wise

39

또 다른 옵션은 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() 

플롯 : showtextRStudio 내장 그래픽 장치에서 제대로 작동하지 않으므로 Windows 그래픽 장치를 열어야 함

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

편집 : showtextRStudio 에서 사용할 또 다른 해결 방법 입니다. R 세션의 시작 부분에서 다음 코드를 실행합니다 ( 소스 ).

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

1
감사합니다.이 작업을 기대합니다!
EngBIRD

1
천 번 감사합니다 ...이 패키지를 사용하면 a) font_families ()로 ggplot에 사용할 수있는 글꼴 군 확인-b) font_files ()로 글꼴 파일 이름 찾기-c) 글꼴 파일 추가 font_add (family, font_file_name)에 의해 글꼴 패밀리로. 대박!!!
Agile Bean

@AgileBean : 제가 도울 수있어서 다행입니다 :)
Tung

1
중요 : 먼저 xquartz.org 에서 XQuartz 패키지를 모두 설치해야합니다. 그렇지 않으면 라이브러리로드를 시도 할 때 설명이없는 오류가 발생합니다.
ivo Welch

이 솔루션은 나를 위해 작동하지 않습니다. 창과 Rstudio의 플롯 창 모두에서 여전히 기본 글꼴을 얻습니다.
GreenManXY

9

새로운 것을 설치하지 않으려는 경우 간단한 대답

플롯의 모든 글꼴을 변경하려면 선택한 글꼴은 plot + theme(text=element_text(family="mono"))어디에 있습니까 mono?

기본 글꼴 옵션 목록 :

  • 단 핵증
  • 산세
  • 가는 장식 선
  • 택배원
  • Helvetica
  • 타임스
  • 아방가르드
  • 서적상
  • Helvetica-Narrow
  • NewCenturySchoolbook
  • 팔라티노
  • URWothic
  • URW 북맨
  • 님 버스 몬
  • URWHelvetica
  • NimbusSan
  • NimbusSanCond
  • CenturySch
  • URWPalladio
  • URWTimes
  • NimbusRom

R은 글꼴 범위가 크지 않으며 Mike Wise가 지적했듯이 R은 일반적인 글꼴에 대해 다른 이름을 사용합니다.

이 페이지 는 기본 글꼴을 자세히 살펴 봅니다.


4

파티 에 늦었지만 shinyapps.io ggplotsshiny앱 내부에 사용자 지정 글꼴을 추가하려는 사람들에게는이 기능이 흥미로울 수 있습니다 .

다음을 수행 할 수 있습니다.

  1. 에 넣어 사용자 정의 글꼴 www디렉토리 : 예 IndieFlower.ttf로부터 여기
  2. 여기 에서 단계를 따르십시오

그러면 app.R파일 내부에 다음과 같은 상단 섹션이 있습니다.

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

전체 예제 앱은 여기 에서 찾을 수 있습니다 .


2

ggplot2 플롯의 글꼴을 전역 적으로 변경합니다.

theme_set(theme_gray(base_size = 20, base_family = 'Font Name' ))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.