1. 趣旨
発端はこの記事を書いたこと。
【R】 正規分布のスペクトルを描く
この記事を書いてグラフを画像に出力したときに、ふと思った。
平滑化したい!!!!!
curve()
を使って滑らかなカーブをplotしたい!!!!! と。
ということで、頑張って画質向上を目指しましょう。
2. 比較
2-1. before
カクカクすぎて見るに耐えない。
このままSVG出力しても拡大に耐えられません。
2-2. after
芸術品と見紛うほどの美しさ。
3. 手順
3-1. 「点の数」を増やす
ざっくり言ってしまえば、Rで曲線グラフを描写しようとすると「沢山の点と点を直線で結ぶ」ことで曲線を表現しようとしてしまいます。なのでカクカクしてても仕方がない・・・いや待てよ。じゃあ点の数を増やせばいいんじゃないか・・・?
君のような勘のいいガキは嫌いだよ — ショウ・タッカー
この点のことをノードと言いますが、デフォルトでは101個となっています。 ですが実は引数で無限に増やせます。パソコンの処理能力が追い付く限りは。
ということで、増やしましょう。好きなだけ。
n
という引数に、ノード数を設定してください。
参考までに、僕のおんぼろPC環境(6年目のオンボロPC)でも一曲線当たり3万点とかでも全然余裕です。
# before (ノード数 = 101)
> curve(dnorm(x, 0, 1), -4, 4, add = F, lwd = 2)
# after (ノード数 = 30,000)
> curve(dnorm(x, 0, 1), -4, 4, add = F, lwd = 2, n = 30000)
3-2. ベクター画像として保存する
点の数を増やしたら、これを一旦ベクター画像として保存しましょう。
RStudioの場合、Plot図の上のほうにあるExport > Save as Image
を選択します。
サイズは調整してもしなくても良いですが、Image Formatからベクター画像形式のものを選択しましょう。
基本的にはSVGファイルです。
Metafileでもいいですが、点の数を増やしすぎると正常に保存できないことがあります。
3-3. お好きなエディタでPNGとして保存する
必要であれば、保存したSVGファイルをInkscapeなど、SVGファイルが扱えるソフトで開いて、そのままPNGとしてエクスポートしましょう。
画像の大きさは、ここで調整できます。少し大きめに保存しておくのがオススメ。
よっぽど大きくしない限りはカクカクしないはずですが、もしカクカクが気になったら3-1. に戻って点の数を増やしてください。
4. ちなみに
- 実はSVGとして出力することで、曲線部分だけでなく軸やラベル文字までも綺麗に描写できるようになります。
- 紹介した方法は、
curve()
だけでなくplot()
にも使えることを確認しました。他にも何かあったら教えてください。
> FUN <- function(x) {x^3-x^2-25*x+1}
# before (ノード数 = 5)
> plot(FUN, -7, 7, n = 5)
# after (ノード数 = 100,000)
> plot(FUN, -7, 7, n = 100000)
5. おわりに
やっぱりグラフは滑らかなのが一番!
Enjoy!
おしまい。