Q. なぜエクセルでもグラフは描けるのに、わざわざRで、ggplotで描くのでしょうか?
A. Rとggplotが好きだからです。
ということで、【ggplotメモ1】では、irisデータを読み込むことができました。今回はirisデータを使って、萼片の長さと幅の関係を見る散布図を描きたいと思います。
# ggplot2の読み込み
library( ggplot2 )
# グラフの基本設定
ggplot() + theme_set( theme_classic(base_size = 12, base_family = "Hiragino Kaku Gothic Pro W3") )
# 描画
g <- ggplot( iris, aes( x = Sepal.Length, y = Sepal.Width ) ) +
geom_point( ) +
xlab( "萼片の長さ" ) +
ylab( "萼片の幅" )
plot( g )
savePlot = function( data, name, dpi, width, height ){
ggsave( plot = data, file = name, dpi = dpi, width = width / dpi, height = height / dpi )
}
savePlot( g, "plot1.png", 300, 1500, 1500 )
こんな感じで書いてみました。
まず、パッケージ「ggplot2」を使用するために、library()を実行してggplot2を読み込みます。
次に、グラフの基本設定を行います。グラフのデザイン、フォントサイズ、フォントを指定します。私はいつもtheme_classicというデザインを使っています。フォントはヒラギノ角ゴシックにしておけば、軸の名前等々を日本語で書くことができます。
そして、実際に描画します。まず、ggplot()の中で 使用するデータを指定します。そしてaes()の中でx軸とy軸にはデータの中のどの値を使うのかを指定します(aesは「aesthetic:審美的な」の略です)。次に、geom_point()と書いて、散布図を作ってほしいと指示します。最後に、x軸とy軸の名前を指定します。さっきヒラギノフォントを指定したので、ここで日本語を書いても文字化けしません。
plot()でplotsのところに描いたグラフを表示させます。
こんな感じのグラフが描けました。
描いたグラフは保存しておきましょう。savePlot = 以降はグラフを保存する文です。savePlot()の中で、どのグラフを保存するのか、どういう名前で保存するのか、解像度、サイズはどうするのかを指定します。お好みの値を指定してください。
さて、上のグラフでは、全ての品種のデータが一緒くたになってしまっています。今度は品種ごとに色分けをしてみたいと思います。
# 描画
g <- ggplot( iris, aes( x = Sepal.Length, y = Sepal.Width ) ) +
geom_point( aes( colour = Species ) ) +
xlab( "萼片の長さ" ) +
ylab( "萼片の幅" )
plot( g )
描画のところにちょっとだけ加筆しました。geom_point()の中にaes()を設けて、Speciesによって色を変えることを指定します。これでplotしてみると、
こんな感じになります。かわいいね!!!!
さらに、品種ごとに回帰直線を引いてみたいと思います。
# 描画
g <- ggplot( iris, aes( x = Sepal.Length, y = Sepal.Width ) ) +
geom_point( aes( colour = Species ) ) +
xlab( "萼片の長さ" ) +
ylab( "萼片の幅" ) +
geom_smooth( method = "lm", aes( colour = Species ) ) # 近似線は回帰法によって求める
plot( g )
y軸の名前の指定をした後で、近似線の指定をしました。geom_smoothで近似線を引きたいことを指示します。さらに()の中で近似線は回帰法によって求めること、Speciesごとに描くことを指示します。これでplotしてみると、
こんな感じになります。デフォルトで95%信頼区間が表示されます。すごく便利。信頼区間が不要な場合は「method = “lm”」の後で「se = FALSE」と指定してください。
最後に、縦軸と横軸の値の設定についてです。
# 描画
g <- ggplot( iris, aes( x = Sepal.Length, y = Sepal.Width ) ) +
geom_point( aes( colour = Species ) ) +
xlab( "萼片の長さ" ) +
ylab( "萼片の幅" ) +
geom_smooth( method = "lm", aes( colour = Species ) ) + # 近似線は回帰法によって求める
scale_x_continuous( breaks = c( 0, 2, 4, 6, 8 ), limits = c( 0, 8 ) ) +
scale_y_continuous( breaks = c( 0, 1, 2, 3, 4, 5 ), limits = c( 0, 5 ) )
plot( g )
回帰直線を引いた後に、x軸とy軸の値の指定を行いました。scale_x_continuousとscale_y_continuousです。breaksで軸に表示する数値を指定します。limitsでは値の最小値と最大値を指定します。これでplotしてみると、
軸の値が変わりました。やったね。
以上、散布図でした。