【ggplotメモ2】散布図を描く

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してみると、

軸の値が変わりました。やったね。

以上、散布図でした。