web-dev-qa-db-ja.com

ggplot2のフォントの変更

むかしむかし、windowsFonts(Times=windowsFont("TT Times New Roman"))を使用してggplot2フォントを変更しました。今、私はこれからそれを得ることができません。

family=""ggplot2theme()に設定しようとすると、以下の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()))
52
EngBIRD

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

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)

これをもたらす:

enter image description here

更新:

次のコードスニペットで、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)

収量: enter image description here

79
Mike Wise

別のオプションは、 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() 

プロット:showtextはRStudio組み込みのグラフィックスデバイスではうまく機能しないため、Windowsグラフィックスデバイスを開く必要があります

# https://github.com/yixuan/showtext/issues/7
# https://journal.r-project.org/archive/2015-1/qiu.pdf
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) 
18
Tung

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

あなたはできる:

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

これは、app.Rファイル内の次の上部セクションにつながります。

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

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

3
symbolrush