更新: 2012-09-24 21:50:27
生態学のデータ解析 - R 作図の日本語表示
- R 作図の日本語表示について (2009-06-21 時点のもの)
- 本/R Graphics 日本語版 の「訳者あとがき」に掲載できなかったハナシ
- ちなみに掲載したハナシは以下のようなかんぢで ……
-
pdf()
などで日本語を表示したければfamily = "Japan1"
と指定せよ - UTF-8 文字コードも使える
- 半透過 (semi-transparent) 色指定はいろいろな device で使えるようになってる
- その他
-
- なかまさんからいろいろと教えていただき,内容に関しては久保が勝手にまとめてしまいました
- なかまさんの御承諾をえてはいますが
- とくに重要?!
- X11() デヴァイスでの挙動
- pdf() デヴァイスでの挙動
- tcltk() なデヴァイス
- フォント名について
- Hershey な EUC
- 文字コード「自動」認識について
- なかまさんの .Rprofile
とくに重要?!
- R-2.7.0 以降では
-
family="symbol"
は指定できない - GraphicDeviceの I/F 上は UTF-8のやりとりをサポートしました (基本的には)
-
- fontfaceはたぶん歴史的位置に居ます. 今後はfamilyが主体になるはずです.
- family(1=標準, 2=太字, 3=斜体, 4=斜体太字) 5 は Symbolで予約.
X11() デヴァイスでの挙動
- Xlib な
X11()
なら斜体はでる- 今どきのlibfreetypeはTTCapが使えるので, TTCapの機能で RHL系のディストリビューションはTrueTypeフォントを元に斜体や太字をXLFDに展開して使えます.
-
type="cairo"
では斜体がでない?- と思ったらこれは久保の Cairo が古い (1.2.4) ためでした
- MacOSXの
X11
は古典的な日本語フォントしか無く, ひらぎのはOpenTypeで提供(中台韓はTrueType...)されており, 標準ではどうやっても斜体,太字が出せません.- OSXの日本語の設定はいささかトリッキーですが, 出ない訳ではないので, まだ直していません. http://aoki2.si.gunma-u.ac.jp/R/begin.html
- Cairo なデヴァイスではうまくいかない場合もある
- fontconfig に依存するので, Cairoの設定が旨く行ってないのかも. CairoやPangoはまだ発展途上ですし.
pdf() デヴァイスでの挙動
- PDFだと, 以下のような国際色豊かな作図も可能です.
pdf(family="Japan1") title("hoge",family="Helvetica")
tcltk() なデヴァイス
- たぶん, tcltkを触るのでは無く, Rcmdr や affylmGUI 経由で...
- MacはAquaのTkもあるのですが, イベントを旨く処理できません.
フォント名について
-
Japan1
の意味は?- Adobe-Japan1の1です. AdobeのEncodingの名前です.aj14は Adobe-Japan1-4です.(4とか6はバージョン) 本来なら, Adobe-Japan1-6-GoticBBB とか長いので, Adobeやらはしょって, Japan1GothicBBBとかにしました. かつては Adobe-Japan2(いわゆる補助漢字)もありましたが, 1-6以降無くなりました, CNS1,GB1, Korea1は元から1しかありません.
- 仕様書は http://partners.adobe.com/public/developer/en/font/5078.Adobe-Japan1-6.pdf
Hershey な EUC
- Hershey のEUCは, JISの第一水準のみしか扱えません.
-
?Japanese
参照
-
文字コード「自動」認識について
(久保が質問,なかまさんから回答いただいた)
ところで,もうひとつ質問があるのですが,R-2.7.0 からは UTF-8 が作図など に使えるといったご指摘について考えたのですが,そもそも処理系ごとに異な るデフォルトの日本語文字コードについて,ユーザーの立場からすると,あた かも R が自動認識して処理しているように見えます.このような文字コードに 対処する動作に関しては「R が自動的に認識している」といったたぐいの表現 を使用して問題ないでしょうか.
?Encoding
をしていただくと分かると思うのですが, native,latin1,utf-8の
\# native => unknown
状態を保持出来るようになっています. iconvでnative,utf-8変換するので, 自動認識と言う意味ではその通りですが, まだ開発途中と言った方が適切 かと思います. 将来的には, m17nになる予定です. ですので
「R側で可能ならば自動的に認識している」
と言う感じかと思います.
RCurl等では,
data<-iconv(getURL("http://www.ism.ac.jp",.encoding=1),"cp932","")
http://www.ism.ac.jp はsjisで書いてありますから, iso8859-1(.encoding=1)で取り込んで, iconvにはそれを, "cp932"だと偽って処理させてる訳です.
# 要するに場あたり的に各方面で...
これがナイスアイデアかどうかは微妙ですが, 他の言語が歩んだ方式も 副作用もRもまた歩むと言う事です.
wineなんかも, LANG=C で Rを起動すればちゃんと動きますよね. wineの中はANSIしか動きませんので, Unicodeに完全に対応しても マズイ面もあります.
まあ, そんな難しい物では無いのですが, 作業が膨大と言うのは 間違いないでしょう.
(あまりにも面白かったので次のメイルも勝手ながら引用)
そして,どのプログラミング言語もここで苦しむことになるようですね.
通常の言語では, パース, 文字列関数, グラフィック関係が別担当者ですが,
「Ripley特攻隊」
とも表現すべき努力が払われます. これら戦略上重要な事ではありますが, 現地徴用兵として竹槍でゲリラ参戦している身とすれば,
「最近老眼が辛い!」
のでもっと助けが欲しいですね. やっぱり.
- (久保感想) なかまさんの尽力もたいへんなものですが,ソフトウェア開発とは本来はあまり関係なさそうな Ripley 御大 (高名な統計学者) の「特攻」ぶりはたいへんなもので,おかげで我々は R のようなソフトウェアを研究に使えているわけで……
- Ripley さんに限らず,昨年末に日本にちょっと来られた R 開発コアメンバーのひとたちとか,R 日本語ドキュメントをまとめられた間瀬さんとか,じつに多くの人々の献身のうえに R というソフトウェアの開発は驀進しているんだなぁ,ということで.
なかまさんの .Rprofile
- 2009-06-21 時点のもの
setHook(packageEvent("grDevices", "onLoad"), function(...){ if(.Platform$OS.type == "windows") grDevices::windowsFonts(sans ="MS Gothic", serif="MS Mincho", mono ="FixedFont") if(capabilities("aqua")) grDevices::quartzFonts( sans =grDevices::quartzFont( c("Hiragino Kaku Gothic Pro W3", "Hiragino Kaku Gothic Pro W6", "Hiragino Kaku Gothic Pro W3", "Hiragino Kaku Gothic Pro W6")), serif=grDevices::quartzFont( c("Hiragino Mincho Pro W3", "Hiragino Mincho Pro W6", "Hiragino Mincho Pro W3", "Hiragino Mincho Pro W6"))) if(capabilities("X11")) grDevices::X11.options( fonts=c("-kochi-gothic-%s-%s-*-*-%d-*-*-*-*-*-*-*", "-adobe-symbol-medium-r-*-*-%d-*-*-*-*-*-*-*")) grDevices::pdf.options(family="Japan1GothicBBB") grDevices::ps.options(family="Japan1GothicBBB") } ) attach(NULL, name = "JapanEnv") assign("familyset_hook", function() { winfontdevs=c("windows","win.metafile", "png","bmp","jpeg","tiff") macfontdevs=c("quartz","quartz_off_screen") devname=strsplit(names(dev.cur()),":")[[1L]][1] if ((.Platform$OS.type == "windows") && (devname %in% winfontdevs)) par(family="sans") if (capabilities("aqua") && devname %in% macfontdevs) par(family="sans") }, pos="JapanEnv") setHook("plot.new", get("familyset_hook", pos="JapanEnv")) setHook("persp", get("familyset_hook", pos="JapanEnv")) # Winでは Rdevga を触ると, fontfaceに影響するので, より正しくは上記の # 方法が現在理想とされる設定かもしれません. # このシステムの開発が終わる事は無いでしょう.