ggplot2でのフォントの変更


96

昔々、ggplot2usingを使ってフォントを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]「TTTimesNewRoman」

$ sans [1]「TTArial」

$ mono [1]「TTCourierNew」

しかし、これは私が走った後な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 2018

2
また、 windowsFonts 3.4.1以降はgrDevicesから消えました。ここのコードは更新する必要があります。
smci 2018

1
@smci:これこれを参照してください。Linuxで正しいパスを指定する必要があります
Tung

回答:


128

あなたは私が思うに初期化ステップを逃しただけです。

コマンドを使用すると、使用可能なフォントを確認できます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 , but additionally, I not sure that my TTTimesNewRoman 」loadFonts`を切り替えることができます。電話をかけるfonts()と、300近くのフォントのリストがありますが、ローカル環境にインストールされていないため、Windowsデバイスからアクセスできると思います。それが意味があるかどうかはわかりませんが、役立つ可能性のあるスニペットを使用して、元の質問に更新を提供しようとしました。再度、感謝します!
EngBIRD 2015

名前スニペットの更新に感謝します。これは非常に役立ちます。私のインストールで認識される文字列がファミリだけである場合、コミックsansMsの例はどのようにして正しい外観を生成しましたか。
EngBIRD 2015

幸運。そのフォント(および他の多くのフォント)では、姓は家族の価値と同じです。だからwf[which(wf=="Comic Sans MS")]利回り$``Comic Sans MS`` [1] "Comic Sans MS"
マイクワイズ

ありがとう、特定の場所からフォントを指示またはロードできるかどうか知っていますか?つまり、ロードフォントのインストールやフォントの指定でも?サマリー表示呼び出しを繰り返しても、追加のウィンドウに表示されるフォントが表示されません...
EngBIRD 2015

font_importとloadfonts()を次々に実行しましたか?
マイクワイズ2015

43

もう1つのオプションは、showtextより多くの種類のフォント(TrueType、OpenType、Type 1、Webフォントなど)とより多くのグラフィックデバイスをサポートし、Ghostscriptなどの外部ソフトウェアの使用を回避するパッケージを使用することです。

# install.packages('showtext', dependencies = TRUE)
library(showtext)

いくつかのGoogleFontsをインポートする

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

編集2バージョン0.9以降、showtextはRStudioグラフィックデバイス(RStudioGD)で適切に機能します。showtext_auto()RStudioセッションを呼び出すだけで、プロットが正しく表示されます。


1
ありがとう、私はこれを試すのを楽しみにしています!
EngBIRD 2018

1
何千回もありがとう...パッケージを使用すると、a)font_families()でggplotに使用できるフォントファミリを確認できます-b)font_files()でフォントファイル名を検索します-c)フォントファイルを追加しますfont_add(family、font_file_name)によるフォントファミリーとして。驚くばかり!!!
アジャイルビーン

@AgileBean:お役に立ててうれしいです:)
Tung

1
重要:最初にxquartz.orgからXQuartzパッケージをすべてインストールする必要があります。そうしないと、ライブラリを読み込もうとすると、説明のないエラーが発生します。
–ivoウェルチ2018

この解決策は私にはうまくいきません。ウィンドウとRstudioのプロットウィンドウの両方で、まだデフォルトのフォントを取得しています。
GreenManXY

11

新しいものをインストールしたくない場合の簡単な答え

プロット内のすべてのフォントを変更するには選択したフォントはplot + theme(text=element_text(family="mono"))どこにmonoありますか。

デフォルトのフォントオプションのリスト:

  • 単核症
  • sans
  • セリフ
  • 宅配便
  • ヘルベチカ
  • タイムズ
  • アバンギャルド
  • ブックマン
  • ヘルベチカ-狭い
  • NewCenturySchoolbook
  • パラティーノ
  • URWGothic
  • URWBookman
  • NimbusMon
  • URWHelvetica
  • NimbusSan
  • NimbusSanCond
  • CenturySch
  • URWPalladio
  • URWTimes
  • NimbusRom

Rはフォントの範囲が広くなく、Mike Wiseが指摘しているように、Rは一般的なフォントに異なる名前を使用しています。

このページでは、デフォルトのフォントについて詳しく説明します。


4

パーティーに遅れましたが、これは、shinyapps.ioのアプリggplots内にカスタムフォントを追加しようとしている人にとっては興味深いかもしれませんshiny

あなたはできる:

  1. カスタムフォントをwwwディレクトリに配置します:例:ここIndieFlower.ttfから
  2. ここからの手順に従ってください

これにより、app.Rファイル内の次の上部セクションが表示されます。

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

完全なサンプルアプリはここにあります


3

ggplot2プロットのフォントをグローバルに変更します。

theme_set(theme_gray(base_size = 20, base_family = 'Font Name' ))
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.