【ggplotメモ6】折れ線グラフを描く

今回は折れ線グラフを描いていきたいと思います。折れ線グラフは時系列変化を示すグラフですね。

これまではirisデータを使っていましたが、irisデータは時系列変化に関するデータは含まれていないので、新しいデータセットを使いたいと思います。「統計を学びたい人へ贈る、統計解析に使えるデータセットまとめ」というページがあったので、そこから時系列変化を示しているデータを探しました。今回は「airquality(ニューヨークの大気状態観測値データ)」を使って5月から9月までの気温の変化を示していきましょう。

早速書いていきます。

# 折れ線グラフ 

# Environmentにairqualityを置いておく 
data( "airquality" ) 

# Valuesとして読み込まれる 
str( airquality ) 

# ValuesからDataになる 
head( airquality ) 

# ggplot2の読み込み 
library( ggplot2 ) 

# グラフの基本設定 
ggplot() + theme_set( theme_classic(base_size = 12, base_family = "Hiragino Kaku Gothic Pro W3") ) 

# 描画 
l <- ggplot( airquality, aes( x = Month, y = Temp ) ) + 
    geom_line( stat = "summary", fun = "mean" ) + 
    stat_summary(fun = "mean", geom = "point", shape = 21, size = 2., fill = "black") + 
    stat_summary( fun.data = "mean_se", geom = "errorbar", width = .2) + 
    xlab( "月" ) + 
    ylab( "気温(華氏)" ) + 
    scale_y_continuous( breaks = c( 32, 52, 72, 92 ), limits = c( 32, 95 ) ) 

plot( l )

airqualityデータはこんな感じです。

> head( airquality ) 
  Ozone Solar.R  Wind Temp Month Day 
1    41     190   7.4   67     5   1  
2    36     118   8.0   72     5   2 
3    12     149  12.6   74     5   3 
4    18     313  11.5   62     5   4 
5    NA      NA  14.3   56     5   5 
6    28      NA  14.9   66     5   6

今回はこの中のTemp(華氏温度)とMonth(月)を使います。

まず、ggplot2 の読み込みをしてからグラフの基本設定をします。

次に、横軸に月、縦軸に華氏温度を指定してから、geom_line() と書きます。これが折れ線グラフを描いてくださいという指示です。() の中では、各月の平均値を求めて平均値同士を線で繋げるように指定しています。

あとはエラーバーをつけたり、縦軸と横軸の名前をつけたりしています。

出来上がったグラフがこちら。

華氏温度の32度が摂氏温度で言うところの0度なので、縦軸の最小値を32°Fにしました。

各月のプロットのところに黒い丸をつけているのですが、不要の場合は描画のところの stat_summary(fun.y = “mean”, geom = “point”, shape = 21, size = 2., fill = “black”) を消していただければと思います。

文の書き方には色々バリエーションがあるので、自分で書きやすい方法を模索していっていただければと思います。例えば、こういうのもありです。

l2 <- ggplot( airquality, aes( x = Month, y = Temp, group = 1 ) ) + 
    stat_summary( fun = mean, geom = "line", size = 0.5 ) + 
    stat_summary( fun.data = "mean_se", geom = "errorbar", size = 0.5, width = 0.1) + 
    stat_summary( fun = mean, geom = "point", size = 2 ) + 
    scale_shape_manual( values = c( 1 ) ) + 
    xlab( "月" ) + 
    ylab( "気温(華氏)" ) + 
    coord_cartesian( ylim = c( 32, 95 ) ) 

plot( l2 )

さっき「geom_line( stat = “summary”, fun.y = “mean” ) +」としていたところを、「stat_summary( fun.y = mean, geom = “line”, size = 0.5 ) +」という風に「stat_summary」を使って書いています。

標準誤差をつけるところと、平均値をプロットするところが前後していますが、ここは大体一緒です。プロットするときの点の形は、別途「scale_shape_manual( values = c( 1 ) )」と書いて指定することもできます。あとは、y軸の範囲の指定も、「coord_cartesian」を使うことができますよ。この場合は、範囲だけを指定して、軸に表示する値は指定しません。

また、条件ごとの折れ線グラフを1つの図の中に乗せたい場合、全ての「stat_summary」の中でまず「aes( group = condition )」と指定すれば良いです。ここのconditionの所には、自分でつけた条件名がわかるカテゴリー名を入れてください。

ではプロット!

以上、折れ線グラフでした。