この広告は、90日以上更新していないブログに表示しています。
Rのステキグラフィックスライブラリ「ggplot2」のqplot関数についてまとめてみた.少し頑張りすぎた.
ggplot2にはqplot(Quick PLOTの略)というステキな関数が用意されている.これを使うと,デフォルトの設定のままでもRのbaseライブラリ(plot関数など)と比べてきれいな図が描ける上に,色付けや凡例の設定もある程度よしなにやってくれる.
以降,ggplot2のqplot関数について詳しく見ていくことにしよう.
最初に,qplot関数について以下のことをチェックする.
次に,以下のグラフについてbaseライブラリとggplot2のqplot関数の間でシンタックスの違いや描画されるグラフを比較していく.
最後にbaseライブラリの低水準作図関数とggplot2のレイヤーの対応関係を確認する.
また,この記事ではggplot2パッケージ付属のdiamondsデータとeconomicsデータをサンプルとして使っていく.
>library(ggplot2)> head(diamonds) carat cut color clarity depth table price x y z10.23 Ideal E SI261.5553263.953.982.4320.21 Premium E SI159.8613263.893.842.3130.23 Good E VS156.9653274.054.072.3140.29 Premium I VS262.4583344.204.232.6350.31 Good J SI263.3583354.344.352.7560.24 Very Good J VVS262.8573363.943.962.48> dim(diamonds)> head(economics) date pce pop psavert uempmed unemploy11967-06-30507.81987129.84.5294421967-07-31510.91989119.84.7294531967-08-31516.71991139.04.6295841967-09-30513.31993119.84.9314351967-10-31518.51994989.74.7306661967-11-30526.21996579.44.83018> dim(economics)[1]4786
各サンプルデータの詳細についてはヘルプを参照.
> ?diamonds> ?economics
qplot関数はbaseライブラリのplot関数のような感覚で使うことができる.
> qplot(carat, price, data= diamonds, colour= clarity)
色とデータの対応付けや軸のラベルなどはqplot関数がよしなにやってくれる.
> qplot(carat, data= diamonds, geom="density", colour= cut)
わーお,きれいな図.
(TODO:色などの指定方法について書く)
Rで作図する際に,描画対象のデータがデータフレームであるケースはかなり多い.データフレームの各列は$を使うことで簡単にアクセスできる.
> head(diamonds) carat cut color clarity depth table price x y z10.23 Ideal E SI261.5553263.953.982.4320.21 Premium E SI159.8613263.893.842.3130.23 Good E VS156.9653274.054.072.3140.29 Premium I VS262.4583344.204.232.6350.31 Good J SI263.3583354.344.352.7560.24 Very Good J VVS262.8573363.943.962.48> head(diamonds$price)[1]326326327334335336
しかし,データフレームの列をdiamonds$〜のように指定しつつqplot関数でグラフを作ろうとすると,以下のようにコードが冗長になり,自動的につけられた軸のラベルや凡例に"diamonds$"がついて煩わしくなるといった問題が発生する.
> qplot(diamonds$carat, diamonds$price, colour= diamonds$clarity)
qplot関数のdataパラメータを使うと,以下のようにデータフレームの列の名前だけでプロットするデータを指定できるようになる.こうすることで出来上がった図のラベルや凡例もすっきりする.
> qplot(carat, price, data= diamonds, colour= clarity)
qplot関数でデータフレームをグラフ化する場合は,dataパラメータを積極的に使っていくようにした方がいいだろう.
以降,様々な図についてbaseライブラリとqplot関数の具体例を確認しながら比較していこう.
散布図はデータを点で平面上にプロットするだけの基本的な図だ.
plot(x, y)# baseqplot(x, y)# ggplot2
具体例.
> plot(diamonds$carat, diamonds$price)> qplot(carat, price, data= diamonds)
折れ線グラフは時系列データの可視化の際によく使われる.
plot(x, y, type="l")# baseqplot(x, y, geom="line")# ggplot2
具体例.
> plot(economics$date, economics$unemploy, type="l")> qplot(date, unemploy, data= economics, geom="line")
おなじみの棒グラフ.
barplot(x)# baseqplot(names(x), x, geom="bar", stat="identity")# ggplot2
値の頻度を棒グラフで表示する場合は以下の通り.
barplot(table(x))# baseqplot(x, geom="bar")# ggplot2
xが離散値の場合,qplot関数のgeom = "bar"は省略できる.
具体例.
> table(diamonds$color) D EF G H I J67759797954211292830454222808> barplot(table(diamonds$color))> qplot(color, data= diamonds)
データの度数分布を可視化する図.
hist(x)# baseqplot(x, geom="histogram")# ggplot2
hist関数はbinsで,qplot関数はbinwidthでヒストグラムの幅を調節できる.
hist(x, bins=100)qplot(x, geom="histogram", binwidth=1)
xが連続値の場合,qplot関数のgeom = "histogram"は省略できる.
具体例.
> hist(diamonds$price)> qplot(price, data= diamonds)
ヒストグラムと同じくデータの分布を示す図.こちらはカーネル密度推定を使っている.
plot(density(x))# baseqplot(x, geom="density")# ggplot2
具体例.
> plot(density(diamonds$price))> qplot(price, data= diamonds, geom="density")
複数のデータの分布を比較するのに便利な図.
boxplot(y~ x)# baseqplot(x, y, geom="boxplot")# ggplot2
具体例.
> boxplot(diamonds$carat~ diamonds$cut)> qplot(cut, carat, data= diamonds, geom="boxplot")
Rのbaseライブラリの低水準作図関数はそれぞれ以下のggplot2のレイヤーと対応している.
| base functions | ggplot2 layers |
|---|---|
| curve() | geom_curve() |
| hline() | geom_hline() |
| lines() | geom_line() |
| points() | geom_point() |
| polygon() | geom_polygon() |
| rect() | geom_rect() |
| rug() | geom_rug() |
| segments() | geom_segment() |
| text() | geom_text() |
| vline() | geom_vline() |
| abline(lm(y ~ x)) | geom_smooth(method = "lm") |
| lines(density(x)) | geom_density() |
| lines(loess(x, y)) | geom_smooth() |
Rのbaseの低水準作図関数は,先にplot関数でグラフを描画してから実行することでグラフ上に図形を追加する.
plot(x, y)lines(x, y)
qplot関数の場合は,以下のようにqplot()の戻り値に対してレイヤーを追加することで描画できる.
qplot(x, y)+ geom_line()
qplot関数を使うとデフォルトのままでもbaseライブラリよりもきれいなグラフが描ける.qplot関数+レイヤーという具合にインターフェイスに一貫性がある点も重要なポイントだ(barplotやhistのような他の関数を呼び出す必要がほとんどない).
まだggplot2を触ったことがない人は是非次回Rを使う時に試してみよう.
引用をストックしました
引用するにはまずログインしてください
引用をストックできませんでした。再度お試しください
限定公開記事のため引用できません。