32

ggplot2 で作成された PDF プロットでラベル、タイトルなどに Unicode 文字を使用するにはどうすればよいですか?

次の例を検討してください。

library(ggplot2)
qplot(Sepal.Length, Petal.Length, data=iris, main="Aʙᴄᴅᴇғɢʜɪᴊᴋʟᴍɴᴏᴘǫʀsᴛᴜᴠᴡxʏᴢ")
ggsave("t.pdf")

プロットのタイトルは Unicode 文字 (小文字) を使用しており、出力では として表示され...ます。この問題は、pdf プロットでのみ発生します。最後の行を に置き換えるとggsave("t.png")、出力は期待どおりになります。

私は何を間違っていますか?私が持っている R スクリプトは UTF-8 エンコーディングです。システム情報:

R version 2.14.1 (2011-12-22)
Platform: x86_64-pc-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=C                 LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

この問題の解決策を探しているときに、R が PDF や PostScript 出力の UTF-8 などのマルチバイト エンコーディングにシングルバイト エンコーディングを使用しているという証拠をいくつか見つけました。たとえば、ユーロ記号を機能させるための提案も見つけましたが、一般的な解決策はありません。

4

3 に答える 3

24

ベンが提案したように、cairo_pdf()あなたの友達です。また、引数を介して非 PostScript フォント (つまり、TTF/OTF) を PDF に埋め込むこともできます (family使用したいグリフを含む PostScript フォントがない場合に重要です)。例えば:

library(ggplot2)
cairo_pdf("example.pdf", family="DejaVu Sans")
qplot(Sepal.Length, Petal.Length, data=iris, main="Aʙᴄᴅᴇғɢʜɪᴊᴋʟᴍɴᴏᴘǫʀsᴛᴜᴠᴡxʏᴢ")
dev.off()

...次のような PDF が得られます。 タイトルにカスタム フォント ファミリと非 ASCII 文字を含む ggplot2 グラフ

この質問も参照してください。タイトルからは直接関係ないように見えますが、R で必要なフォントを取得する方法がたくさんあります。

コメントでリクエストごとに編集してください。これはWindows固有のコードです。

library(ggplot2)
windowsFonts(myCustomWindowsFontName=windowsFont("DejaVu Sans"))
cairo_pdf("example.pdf", family="myCustomWindowsFontName")
qplot(Sepal.Length, Petal.Length, data=iris, main="Aʙᴄᴅᴇғɢʜɪᴊᴋʟᴍɴᴏᴘǫʀsᴛᴜᴠᴡxʏᴢ")
dev.off()

ベース グラフィックス コマンドを使用するには、上記のように、最初にコマンドcairo_pdf()でフォント ファミリを定義するだけで十分です。windowsFonts()もちろん、システムに実際にあるフォントを使用することを確認してください。それには、必要なすべてのグリフが実際に含まれています。

以下のコメントにある DLL ファイルに関する指示は、WindowsでCairo()およびCairoPDF()コマンドを実行するために私がしなければならなかったことです。library(Cairo)それで:

library(ggplot2)
library(Cairo)
windowsFonts(myCustomWindowsFontName=windowsFont("DejaVu Sans"))
CairoPDF("example.pdf")
par(family="myCustomWindowsFontName")
qplot(Sepal.Length, Petal.Length, data=iris, main="Aʙᴄᴅᴇғɢʜɪᴊᴋʟᴍɴᴏᴘǫʀsᴛᴜᴠᴡxʏᴢ")
dev.off()
于 2012-10-08T03:53:06.130 に答える