狠狠撸

狠狠撸Share a Scribd company logo
Rグラフィックス入
門
GGPLOT2による
この 作品 は クリエイティブ?コモンズ 表示 - 継承 4.0 国際 ライセンスの下に提供されています。
参考文献
参考書
?ggplot2に関連する日本語の参考書としては以下の様なもの
があります。リファレンスとしては便利ですが、初学者に
は少し難しかったり、ggplot2のアップデートで動かなくな
っているコードがあったりします。
参考文献
参考WEBサイト
?Webにはggplot2の解説資料がゴロゴロしてます。
?たいてい英語です(ざんねん)。
?今回はここのワークショップ資料を参考にします。
?http://tutorials.iq.harvard.edu/R/Rgraphics/Rgraphics.html
はじめに
データの準備
? http://tutorials.iq.harvard.edu/R/Rgraphics.zip
からワークショップのデータファイルをダウンロードします
。
?どこか適当な場所に展開したら、そのフォルダにRStudioのプ
ロジェクトを作成します(New Project → Existing Directoryか
ら展開して作成されたフォルダを指定します)。
?Rgraphics.Rを開いてみましょう。
全てのソースコードが既に入力されています!
がんばろう
最終目標
?the Economistに掲載されたこ
のグラフの再現を目指します
。
?y軸は人間開発指数、x軸は腐
敗認識指数だそうです。
INTRODUCTION
GGPLOT2の利点
?Grammar of Graphics (Wilkinson, 2005)というデータ可視化の
理念に基いている。
?高度に抽象化されたプロットを作成できる。
?very flexible
?テーマシステムにより外見を磨き上げることができる
?成熟した完璧なグラフィックシステム
?ユーザーが多く、既存の知識やメーリングリストも豊富
INTRODUCTION
GGPLOT2ではできないこと
?3次元グラフの作成(cf. rgl)
?グラフ理論における「グラフ」の描画(cf. igraph)
?インタラクティブなグラフ(cf. 驳驳惫颈蝉)
INTRODUCTION
GRAMMAR OF GRAPHICS
?基本となる考え:グラフの要素を積み木のように組み合わ
せて、想いのままにグラフを描画する。「グラフ要素の積
み木ブロック」には次のようなものが含まれる。
?データ、審美的属性(aesthetic)、幾何学的オブジェクト、
数学的変形(集計)、スケール、軸のシステム、位置の調整
、切り分け方(faceting)
INTRODUCTION
GGPLOTの構造
?ggplot()関数はグラフの基本的な構造を定めます。そこに要
素を足していくことでグラフが作成できます。ggplotの基本
的なグラフ構成要素を次のスライドに示しました。
ね?簡単でしょ?
ggplot(data = <default data set>,
aes(x = <default x axis variable>,
y = <default y axis variable>,
... <other default aesthetic mappings>),
... <other plot defaults>) +
geom_<geom type>(aes(size = <size variable for this geom>,
... <other aesthetic mappings>),
data = <data for this point geom>,
stat = <statistic string or function>,
position = <position string or function>,
color = <"fixed color specification">,
<other arguments, possibly passed to the _stat_ function) +
scale_<aesthetic>_<type>(name = <"scale label">,
breaks = <where to put tick marks>,
labels = <labels for tick marks>,
... <other options for the scale>) +
theme(plot.background = element_rect(fill = "gray"),
... <other theme elements>)
INTRODUCTION
何を言っているのか全くわからない…
INTRODUCTION
怖がる必要はありません!
?最後まで進む頃には理解できるようになっているはずです
。
?とりあえずここでは、 + 演算子を使ってプロットの構成要
素を組み合わせているという点を覚えておきましょう。
ggplot(元になるデータセットやパラメータの初期値を決める) +
geom_なんとか(どんなグラフを作るかを決める) +
scale_なんとか_かんとか(軸の設定をする) +
theme(外観の雰囲気を決める)
INTRODUCTION
使用するデータセット
?使用するのは住宅価格に関するデータセットです。
INTRODUCTION
GGPLOTとBASEグラフィックスの違い
?単純なグラフィックスを作成する場合はコマンドが冗長で
す
?逆に、複雑なグラフィックスを作成する場合はコマンドを
節約できます
?データの型に応じたメソッドがありません(データは常に
データフレームでなければなりません)
?グラフに要素を追加するための仕組み(baseで言うところの
低水準作図関数)が異なります
INTRODUCTION
BASEグラフィックスでヒストグラムを作成する
?とても簡単です。
hist(housing$Home.Value)
INTRODUCTION
GGPLOT2でヒストグラムを作成する
?ちょっと長くなります
library(ggplot2)
ggplot(housing, aes(x = Home.Value)) +
geom_histogram()
INTRODUCTION
BASEで色付きの散布図を作成する
?要素ごとに異なったコマンドが必要で、冗長です。
plot(Home.Value ~ Date,
data=subset(housing, State == "MA"))
points(Home.Value ~ Date, col="red",
data=subset(housing, State == "TX"))
legend(19750, 400000,
c("MA", "TX"), title="State",
col=c("black", "red"),pch=c(1, 1))
INTRODUCTION
GGPLOT2で色付きの散布図を作成する
?コードは短く、解釈も用意です。
ggplot(subset(housing, State %in% c("MA", "TX")),
aes(x=Date,
y=Home.Value,
color=State))+
geom_point()
幾何オブジェクトと
審美的属性
Geometric Objects And Aesthetics
GEOMETRIC OBJECTS AND AESTHETICS
審美的属性のマッピング
?ggplotにおける審美的属性(aesthetic)とは、「目に見える何か
」というような意味です。例えば次のような要素です。
?position: x, y座標の値
?color: “外側”の色
?fill: 塗りつぶし色
?shape: pointの形状
?linetype
?size
GEOMETRIC OBJECTS AND AESTHETICS
審美的属性のマッピング
?それぞれの幾何オブジェクト(geom)は審美的属性の一部の
要素しか受け取ることができません(例えば、棒グラフを作
成するgeom_bar()がshapeを受け取っても利用できません)
。
?それぞれのgeomがどの審美的属性を受け取るかは、geom
のヘルプを確認すればわかります。
?審美的属性に値を対応させる(マッピング)ためには、aes()と
いう専用の関数を用います。
GEOMETRIC OBJECTS AND AESTHETICS
幾何オブジェクト
?幾何オブジェクト(geom)は実際にどのような要素をプロッ
トに描画するかを設定します。例えば次のようなものです
。
?散布図(geom_pointにより作成。)
?折れ線(geom_lineにより作成。)
?箱ひげ(geom_boxplotにより作成。)
?幾何オブジェクトは最低1つは指定する必要がありますが、
上限はありません。+演算子でいくらでも追加できます。
GEOMETRIC OBJECTS AND AESTHETICS
幾何オブジェクト
?幾何オブジェクトとして何が利用できるかの一覧は次のよ
うに確認できます。
?また、RStudioのようなIDEを使用しているのであれば、
geom_まで入力するとリストが自動的に表示されるはずで
す。
help.search(“geom_”, package = “ggplot2”)
GEOMETRIC OBJECTS AND AESTHETICS
散布図
?幾何オブジェクトと審美的属性のマッピングについて学ん
だところで、散布図でこれを試してみましょう。
hp2001Q1 <- subset(housing, Date == 20011)
ggplot(hp2001Q1,
aes(y = Structure.Cost, x = Land.Value)) +
geom_point()
GEOMETRIC OBJECTS AND AESTHETICS
散布図
?散布図を作成するためには、最低限xとyの座標値を審美的
属性としてマッピングする必要があります。
hp2001Q1 <- subset(housing, Date == 20011)
ggplot(hp2001Q1,
aes(y = Structure.Cost, x = Land.Value)) +
geom_point()
GEOMETRIC OBJECTS AND AESTHETICS
回帰直線を追加する
?データに対して回帰分析を実施し、その結果を用いて回帰
直線を描いてみましょう。
?ggplotは途中結果をオブジェクトに格納しておいて、そこに
geomを追加していくことができます。
hp2001Q1$pred.SC <- predict(lm(Structure.Cost ~ Land.Value, data = hp2
p1 <- ggplot(hp2001Q1, aes(x = Land.Value, y = Structure.Cost))
p1 + geom_point(aes(color = Home.Value)) +
geom_line(aes(y = pred.SC))
GEOMETRIC OBJECTS AND AESTHETICS
回帰直線を追加する
?審美的属性のcolorにHome.Valueをマッピングした効果も確
認して下さい。連続値に色を簡単に対応させられるのも
ggplot2の強みです。
GEOMETRIC OBJECTS AND AESTHETICS
平滑化曲線を追加する
?平滑化曲線を追加する専用のgeomがあります。
p1 +
geom_point(aes(color = Home.Value)) +
geom_smooth()
GEOMETRIC OBJECTS AND AESTHETICS
平滑化曲線を追加する
?geom_smoothはデフォルトではloess(データ数1000未満)ま
たはgamで平滑化曲線を作成しますが、method=引数でglm
やlmを指定することもできます。
?実際、先ほどの線形回帰の図はmethod=“lm”の指定でも作成
できます。
?ただし、係数を取り出したりするのが面倒なので、lm()や
glm()できちんとモデル作成した方が良いと思います。
GEOMETRIC OBJECTS AND AESTHETICS
テキストでプロットする
?geom_textに審美的属性のlabel=を指定することで、ポイン
トの位置にテキストラベルを表示できます。
p1 +
geom_text(aes(label=State), size = 3)
GEOMETRIC OBJECTS AND AESTHETICS
テキストでプロットする
?しかし、geom_point()をそのまま追加するとポイントとラベ
ルが重なってしまいます。
p1 +
geom_text(aes(label=State), size = 3) +
geom_point()
GEOMETRIC OBJECTS AND AESTHETICS
テキストでプロットする
?ggrepelパッケージのgeom_text_repelを使用することでラベ
ルとポイントの重なりを回避できます。
install.packages("ggrepel")
library("ggrepel")
p1 +
geom_point() +
geom_text_repel(aes(label=State), size = 3)
GEOMETRIC OBJECTS AND AESTHETICS
ポイントに色を指定する時の注意点
?もし全てのポイントの色を変更したければ、colorをaes()の
外側で指定する必要があります。aes()はデータと審美的属
性を対応させるためのものです。
p1 +
geom_point(aes(size = 2),# 2はデータの変数ではないので間違い
color="red") # 正しい指定
サイズは確かに2になるが、変数とし
て認識されてしまうので余計な凡例が
表示される
GEOMETRIC OBJECTS AND AESTHETICS
複数の審美的属性をマッピングする
?色、形など、複数の審美的属性に異なった変数をマッピン
グできます。これは多変量データをプロットする際有効で
す。
p1 +
geom_point(aes(color=Home.Value, shape = region))
GEOMETRIC OBJECTS AND AESTHETICS
練習問題
?まず、練習問題用のデータセットを読み込んで下さい。
dat <- read.csv(“dataSets/EconomistData.csv”)
GEOMETRIC OBJECTS AND AESTHETICS
練習問題1
?CPIをx軸に、HDIをy軸に散布図を描いて下さい。
?完成物のサンプルは以下のとおりです。
GEOMETRIC OBJECTS AND AESTHETICS
解答1
?最初にhead(dat)などとしてデータフレームの構造を確認す
ることも大切です。
?ggplot()とgeom_…()の基本的な使い方はマスターできまし
たか?
ggplot(dat, aes(x = CPI, y = HDI)) + geom_point()
GEOMETRIC OBJECTS AND AESTHETICS
練習問題2
?練習問題1で作成したプロットのポイントの色を青(blue)に
してください。
GEOMETRIC OBJECTS AND AESTHETICS
解答2
?全てのポイントの色を変更するので、aes()の外側で指定し
ましょう。
ggplot(dat, aes(x = CPI, y = HDI)) +
geom_point(color = “blue”)
GEOMETRIC OBJECTS AND AESTHETICS
練習問題3
?ポイントの色を地域(Region)に対応させて塗り分けて下さい
。
GEOMETRIC OBJECTS AND AESTHETICS
解答3
?ggplot()の中のaes()に指定しても構いません。その場合、全
てのgeom_のaes()が一括で指定されるという意味になりま
す。geom_smooth()を追加してみると違いがわかります。
ggplot(dat, aes(x = CPI, y = HDI)) +
geom_point(aes(color = Region))
GEOMETRIC OBJECTS AND AESTHETICS
練習問題4
?CPIのboxplotをRegion別に作成して下さい。
GEOMETRIC OBJECTS AND AESTHETICS
解答4
?描画したいgeomに対する適切なx軸は何で、y軸は何かとい
うことを意識しましょう。
ggplot(dat, aes(x = Region, y = CPI)) +
geom_boxplot()
GEOMETRIC OBJECTS AND AESTHETICS
練習問題5
?いま作成したboxplotの上にポイントを重ねて描いて下さい
。
GEOMETRIC OBJECTS AND AESTHETICS
解答5
?baseで描こうとすると割と面倒なグラフの一種です。
ggplot(dat, aes(x = Region, y = CPI)) +
geom_boxplot() +
geom_point()

More Related Content

Introduction to R Graphics with ggplot2 #1