グラフ描画ggplot2の辞書的まとめ20のコード

Rによる美しいグラフの作成に欠かせないパッケージ "ggplot2" ですが、
グラフ作成のたびにネット検索したり自分の以前のコードを掘り起こしたりしませんか?
g25.png
author: Unadon (見習い飯炊き兵) 動作環境:Mac OS Sierra 10.12.1; R version3.3.1; rstan 2.10.1

 

はじめに

ggplot2のグラフ作成で迷った時、チートシートやマニュアルは役に立つけど援用しにくいんですよね。「何を言ってるのかわからない」っていうのが結構あります。

「軸ラベル」と「軸タイトル」ってどれがどれなん?など、そういう初歩的なところで引っかかったりして、

目的(こういう図にしたい!)と手段(コード)の間の知識を埋めるのが手間で「もうイヤ!」ってなる。

で、次すぐに忘れてる。

なので、頻繁に使用するggplot2の基本コードとオプションを、辞書的に1つのコードにまとめました。

最後に全部のコードをまとめたものを貼って起きますので、.Rファイルで保存して、手元で便利に使っていただけると幸いです。

目的「ggplot2でよく使うコードを手元ですぐに参照できるようになる」

  1. 散布図
  2. ラインプロット
  3. 密度曲線
  4. ヒストグラム
  5. ヒストグラムと密度曲線の重ね書き
  6. エラーバー
  7. 棒グラフ
  8. ヴァイオリンプロット
  9. 箱ひげ図
  10. グラフレジェンド、タイトル&テキストの変更
  11. グラフの分割1
  12. グラフの分割2
  13. グラフの分割3
  14. テキストの挿入
  15. カラーパレットの変更
  16. y軸とx軸の入れ替え
  17. グラフテーマの変更
  18. 線の追加
  19. スムージング
  20. 回帰直線
  21. 全コードのまとめ

サンプルデータの説明

Rにデフォルトで入っているサンプルデータirisとdiamondsを使います。ほぼirisでいきます。

#data.frame Example--------------------------------------------------
data(iris)
data(diamonds)

#data.frame
str(iris) # data.frame
head(iris)

ひとつの変数がひとつの列に入っていて、セルに一つの情報が与えられています。 行数も揃ったきれいなデータです。

なおggplotでグラフを描画しようとする際には、整然データという概念についてある程度知っておかなければなりません。

詳細は省きますが、

「ひとつの変数が一つの列をなしており、すべての列で行数が同じ」

「群やグループがある場合は、ある列に識別用の変数列があり、中に水準を分けるIDなりなんなりが入っている」

要するに以下のようなデータが必要です。

データ型は、基本的にdata.frameしか使うことができません。

> str(iris) # data.frame
'data.frame':	150 obs. of  5 variables:
 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
 $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
 $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
 $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
 $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

> head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

「アイリス?」「Sepalってなに?」「Setosaってなんなん?」とわたしは真っ先に思いましたので、

変数の内容を記録しておきます。

Iris:アヤメ

Sepal: がく片

Petal: 花びら

Species.Setosa:(種)ヒオウギアヤメ

Species.Versicolor:(種) ハナショウブ

Species.Virginica: (種) カキツバタ

初期設定

パッケージのよみこみと初期設定を行っておきます。今は細かいところは無視で構いません。

theme_bwという白っぽいグリッド線のついた(方眼紙みたいな)グラフスタイルをデフォルトにして、

フォントはHirakakuProN-W3を使います。

特に後者のフォント設定はやっとかないと、日本語表示ができません。

#########################################################################
#package: ggplot2
#########################################################################
invisible({rm(list=ls());gc();gc()})

library(ggplot2)
library(tidyverse)

#以下 全ggplotに適用(theme_set)するもの
#"グラフタイトル14pt",”日本語表示”
ggplot()+theme_set(theme_bw(base_size = 14,base_family="HiraKakuProN-W3"))


では、個別にグラフ描画を行っていきましょう。下記の20のレパートリがあれば、あとは組み合わせで大体のことができるはずです。

基本グラフ編

1. 散布図

g1.png

# 1. scatter plot 散布図を書く------------------------------------
#ggplot()関数の中で、基本設定を定める。キャンバスの設定だと思えばOK
g1<-ggplot(iris, #データフレームirisを使うことを宣言
           aes(x=Sepal.Length, #x軸にはSepal.Lengthを使う
           y=Sepal.Width)) #y軸はSepal.Widthを

#ggplot()で作ったキャンバスに、geom_point()で散布図を上書き(+geom_point()を足す)する。
g1<-g1+geom_point(aes(colour=Species), x軸とy軸は上で設定したのでここでは書く必要なし。colour(線や点の色)をSpeciesごとに変えることを宣言
                  size=1, #点の大きさ
                  alpha=0.5) #透過性0.5
#描画
g1

色の塗り分けが簡単にできるところがggplotの便利さの一つですが、塗り分けが不要な場合はcolour=Speciesの部分を削ってください。

2. ラインプロット

g2.png

今回は例が悪いですが、時系列データなどではよく使うプロットですね。先程の散布図に、線を上書きしてみます。

# 2. line plot 時系列的な線つなぎ------------------------------------
g2<-ggplot(iris,aes(x=Sepal.Length,y=Sepal.Width)) # キャンバスを用意。x軸とy軸を宣言
g2<-g2+geom_line(aes(colour=Species),size=0.5) #線をgeom_line()で足す。x軸とy軸はキャンバスの設定時に宣言したので不要。
g2<-g2+geom_point(aes(colour=Species),size=1,alpha=0.5) #線の上に点(geom_point())を上書き
g2

注意: ggplot2はキャンバスの上に、「順に何かを重ねて描いていく」スタイルです。点より線を最前面に出したい場合は、最後に線を描くという順序でコーディングしましょう。

3. 密度曲線

g3.png

# 3. density plot 確率密度------------------------------------
g3<-ggplot(iris,aes(x=Sepal.Length)) #確率密度曲線を描いていきたいので、y軸の宣言は不要です。確率密度がy軸になるので。
g3<-g3+geom_density(aes(fill=Species),size=0.5,alpha=0.5) #geom_density()を使います
g3<-g3+xlim(3,10) #x軸は3から10の範囲としましょう。
g3

ここで、colour = , fill = の使い方, aes()の意味を感覚的におえておきましょう。

colour = は線や点の色。fill=は塗りつぶしの色です。

aes()の中でこれらを指定すると(例えば”aes(fill=Species)”)、「確率密度曲線をSpeciesの種類ごとに作成して塗り分ける」

aes()の外でこれらを指定すると(例えば”aes(),size=0.5, fill = “red”,alpha = 0.5”) 、

「Speciesの種類は考慮せず全部まとめたひとつの確率密度曲線を赤で塗る」ことになります。

4. ヒストグラム

g4.png

# 4. histogram ヒストグラム------------------------------------
g4<-ggplot(iris,aes(x=Sepal.Length)) #x軸はSepal.Length。ヒストグラムのy軸は度数なので、ここでは指定不要
g4<-g4+geom_histogram(aes(fill=Species), #種類ごとに処理して塗り分け
                      bins=30, #棒は30本立てる
                      size=10, #横に表示するレジェンドのマーク?の大きさ
                       alpha=0.5) #透過性
g4

よく使うヒストグラム。ここでのポイントはbin=30というところです。

“bin = 30” で、ヒストグラムの棒を30本立てるという設定です。

“binwidth=0.5”だと、x軸の値0.5の範囲ずつで度数をまとめるということもできます。

5. ヒストグラムと密度曲線の重ね書き

g5.png

ヒストグラムと密度曲線の重ね書きはベイズ推定をしているとよく使いますが、ちょっとコツが必要です。

ヒストグラムは度数で、密度曲線は確率密度をy軸にとるためです。

# 5 histogram and density ------------------------------------
#ヒストグラムと密度曲線”重ね書き”

#キャンバスを用意する
g5 <- ggplot(iris,  #irisをデータで使う
            aes(x = Sepal.Length, #x軸はSepal.Length
                y = ..density..,   #y軸を確率密度に合わせる(..density..を使う)
                colour = Species, #線はSpeciesごとに出して塗り分ける
                fill = Species #塗りつぶしもSpeciesごとに出して塗り分ける
                )
            )
g5 <- g5 + geom_histogram(   # ヒストグラム
    position = "identity",
    alpha = 0.5
    )
    
g5 <- g5 + geom_density(     # 密度曲線
    stat = "density",
    position = "identity",
    alpha = 0.5
    )
    
g5<-g5+xlim(3,10) #x軸の範囲

#描画
g5

6. エラーバー

g6.png

#キャンバスを用意
g6<-ggplot(iris,aes(x=Sepal.Length,y=Sepal.Width))

g6<- g6+ geom_errorbar(aes(ymin=Sepal.Width-0.7, #エラーバーの下限値(ここではy軸の各Sepal.Widthデータに対して0.7を引いた)
                           ymax = Sepal.Width+0.7), #エラーバーの上限値
                       colour="gray40",
                       alpha=0.1,
                       size=1)
#エラーバーの上に、点を上書き
g6<- g6 + geom_point(aes(colour=Species),size=2,alpha=0.5)

#描画
g6

今回は散布図に対してエラーバーをつけましたが、棒グラフでもやり方は同じです。

また、普通エラーバーには標準誤差や信頼・信用区間の値を使いますので、上記のように定数で入れることは無いように思います。

「標準誤差をエラーバーとしてつけたい」といったケースについては、「標準誤差の列(SEとしましょう)」を予めデータセットに入れておき、

ymin = Sepal.Width-SE,ymax = Sepal.Width+SEのように指定して描くと楽でしょう。

少し中身が見えなくて不安かもしれませんが、標準誤差のエラーバーを描くスマートな方法を次の項でご紹介します。

7. 棒グラフ

g7.png

# 7. Mean Bar plot 棒グラフ------------------------------------
g7<-ggplot(iris, aes(y=Petal.Length, x=Species,fill = Species))  #キャンバスの用意。x軸y軸の指定。塗りつぶしを含む処理をSpeciesの種類ごとに行うことを宣言。

#stat_summary()で統計処理を行う。
#上でSpeciesごとに処理することを宣言したので、fun.yでSpeciesごとにy軸Petal.Lengthの平均を計算する。
#描画方法はbar(棒グラフ)
g7<-g7+stat_summary(fun.y=mean,geom="bar",alpha=0.5) 

###########################################
#注)データが正規分布であると仮定した歳の標準誤差と信頼区間です。
#   データが比率である場合などは、これで出してはいけません
###########################################

#標準誤差はmean_cl_normalで計算、ここでの標準誤差は,上で指定したfill=Speciesの種類ごとに計算される
g7<-g7+stat_summary(fun.data=mean_cl_normal,geom="errorbar",alpha=0.5,size=0.3,width=0.3)

#95%信頼区間をエラーバーにしたい場合はmean_sdl
#g7<-g7+stat_summary(fun.data = mean_sdl, geom = "errorbar",alpha=0.5,size=0.3,width=0.3)

#描画
g7

注意していただきたいのは、ここでの標準誤差や信頼区間は、「データが正規分布に従う」ことを仮定したときの値です。 比率データなどを使用する際には、上のコードで計算しては行けません。

8. ヴァイオリンプロット

g8.png

最近このプロットを知りました、バイオリンに似てる?ベイズの事後分布やメタ分析のフォレストプロットとかをこれで書くとかっこよさそうですね。

# 8. violin plot  ヴァイオリンプロット------------------------------------
g8<-ggplot(iris, aes(y=Petal.Length, x=Species,fill = Species)) 
g8<-g8+geom_violin(alpha=0.5,colour="gray")
g8

9. 箱ひげ図

g9.png

イマイチ用途がわかっていないのですが、出せるようにだけはしておきます。

# 9. box plot 箱ひげ図------------------------------------
g9<-ggplot(iris, aes(y=Petal.Length, x=Species,fill = Species)) 
g9<-g9+geom_boxplot(alpha=0.5,colour="gray30")
g9

オプション編

10. グラフレジェンド、タイトル&テキストの変更

g10.png

#10. グラフとレジェンドタイトル&テキストの変更--------------------------------------------------------------
#ベースとなる図。今回は上の箱ひげ図。
g10<-ggplot(iris, aes(y=Petal.Length, x=Species,fill = Species)) 
g10<-g10+geom_boxplot(alpha=0.5,colour="gray30")

#グラフのタイトルサイズはbase_sizeで変更
g10<-g10+theme_bw(base_size=14,base_family="HiraKakuProN-W3") # Graph Title Size and Font

#軸のタイトルのサイズ。カラーを変えたりもできますが、今回は黒のままで
g10 <- g10 + theme(axis.title.x = element_text(size=14), #axis title letter size
               axis.title.y = element_text(size=14)) 

#軸のテキストのサイズ。カラーを変えたりもできますが、今回は黒のままで
g10 <- g10 + theme(axis.text.x = element_text(size=12),  #axis text letter size 
              axis.text.y = element_text(size=12))   

#グラフの右に出るレジェンドのタイトルサイズと、その下についている項目のテキストサイズ
g10 <- g10 + theme(legend.title = element_text(size=14), #legend size
              legend.text = element_text(size=10),  #legend text size 
              legend.key= element_rect(colour = "white")) # legend mark-box colour

#レジェンドのタイトルと項目の内容を変更
g10 <- g10 + labs(fill = "アヤメの品種") #colour で分けている場合は,colour = "アヤメの品種"
g10 <- g10 + scale_fill_hue(name = "アヤメの品種", 
                        labels = c(setosa = "ヒオウギアヤメ", 
                                   versicolor ="ハナショウブ",
                                   virginica = "カキツバタ") ) 
#軸名の変更
g10 <- g10 + ylab("花びらの長さ(Petal.Length)")
g10 <- g10 + xlab("アヤメの品種")

#グラフタイトルの変更
g10 <- g10 + ggtitle("アヤメの品種ごとの花びらの長さ")

#描画
g10

11. グラフの分割1

g11.png

グラフを分割表示していきます。6種類くらいで分割したかったので、irisをやめてdiamondsというデータ・セットを使います。

#11. グラフの分割1--------------------------------------------------------------
g11 <- ggplot(data=diamonds, aes(x=price,fill=cut)) #ダイヤモンドのデータ。x軸に価格。カットサイズごとに処理、塗り分け。
#ヒストグラムを書く。x軸は価格。安いダイヤモンドは多い。高額なモノは貴重なので少ない。
g11 <- g11 + geom_histogram(alpha=0.5) 

#カットの種類ごとにfacet_wrapする。要するに分割。
g11 <- g11 + facet_wrap(~cut)

#描画
g11

12. グラフの分割2

g12.png

ncol=を指定して5列1行で出力

#12. グラフの分割2--------------------------------------------------------------
g12 <- ggplot(data=diamonds, aes(x=price,fill=cut))
g12 <- g12 + geom_histogram(alpha=0.5) 
g12 <- g12 + facet_wrap(~cut, ncol=5) #5列に並べる
g12

13. グラフの分割3

g13.png

#13. グラフの分割3--------------------------------------------------------------
#facet row and col 行と列
g13 <- ggplot(data=diamonds, aes(x=price,fill=cut))
g13 <- g13 + geom_histogram(alpha=0.5) 
g13 <- g13 + facet_wrap(~cut, ncol=2,nrow=3) #2列3行に並べる
g13

14. テキストの挿入

g14.png

ぶっちゃけこれは使いにくいです。

データにかぶらないようにテキストの位置を指定すると、ちょっとグラフの縦軸横軸のスケールを変えただけで位置調整をやり直したりしないといけません。

画像を保存してからパワポとかでテキストを入れていった方がいいと思います。何より重たい

きれいな数式とか入れようと思ったらなおのこと面倒です。

#14.テキストの挿入----------------------------------------------------------------------
g14<-ggplot(iris, aes(y=Petal.Length, x=Species)) 
g14<-g14+geom_boxplot(alpha=0.5,colour="gray30",aes(fill = Species))

#Setosa
g14<-g14+geom_text(aes(x=1,y=2.5,label="Setosa"),colour="gray30" ,size=6,hjust = 0.5, vjust = 1)

#Versicolor
g14<-g14+geom_text(aes(x=2,y=5.5,label="Versicolor"),colour="gray30" ,size=6,hjust = 0.5, vjust = 1)

#Virginica
g14<-g14+geom_text(aes(x=3,y=7,label="Virginica"),colour="gray30" ,size=6,hjust = 0.5, vjust = 1)
g14

15. カラーパレットの変更

g15.png

ggplot2を使っていて一番楽しいところかもしれません。 ここまででは、塗り分けはデフォルトの赤→青→緑・・・のセットを使ってきましたが、ggplotには色んなカラーパレットがあります。

fill = , colour = で塗り分けるところの色のセットをscale_color_brewerまたはscale_fill_brewerで変更します。

#15. カラーパレットの変更----------------------------------------------------------------------
#sequential palette 連続グラデーションの例
g15<-ggplot(diamonds,aes(carat, price))+
    geom_point(aes(colour = clarity))
g15 <- g15 + scale_color_brewer(palette="BuGn") # Scale color 
g15


#discrete palette 離散塗り分け
g15 <- ggplot(data=diamonds, aes(x=carat))
g15 <- g15 + geom_histogram(aes(fill=cut),alpha=0.5) 
g15 <- g15 + scale_fill_brewer(palette="Spectral") #Scale Fill 
g15

#Colour Variations
 #Sequential(連続カラー): Blues BuGn BuPu GnBu Greens Greys Oranges OrRd PuBu PuBuGn PuRd Purples RdPu Reds YlGn YlGnBu YlOrBr YlOrRd
 #Discrete(離散カラー)  : BrBG PiYG PRGn PuOr RdBu RdGy RdYlBu RdYlGn Spectral

なお、5つの種類ごとに..といった離散値には離散カラーのパレットを使用し、相関係数-1から1まで..という連続値で塗り分けたい場合は連続カラーのパレットを指定

16. y軸とx軸の入れ替え

g16.png

# 16.TransPosition X軸とY軸を転置する------------------------------------------------
g16<-ggplot(iris, aes(y=Petal.Length, x=Species,fill = Species)) 
g16<-g16+geom_violin(alpha=0.5,colour="gray")

#この一行で転置できる
g16<-g16+coord_flip() #Transposition
g16

17. グラフテーマの変更

g17.png

上はtheme_voidを使った一例です。色々あるので試してみてください。

theme_bwを気に入ってますが、領域によっては theme_classicがスタンダードです。

# 17. グラフテーマの変更-----------------------------------------------------
#base density plot
g17<-ggplot(iris,aes(x=Sepal.Length))
g17<-g17+geom_density(aes(fill=Species),size=0.5,alpha=0.5)
g17<-g17+xlim(3,10)


#set Theme
g17<-g17+theme_bw() #white background and grid lines
g17

g17<-g17+theme_dark() #dark back ground
g17

g17<-g17+theme_gray() #gray basic
g17

g17<-g17+theme_light() 

g17

g17<-g17+theme_linedraw() 
g17

g17<-g17+theme_minimal() 
g17

g17<-g17+theme_void() 
g17

g17<-g17+theme_classic() #classic
g17

18. 線の追加

g18.png

0のところに縦線や横線を入れたい。傾きと切片を指定して線を入れたいといった場合は以下です。

# 18. horizontal/vertical/Slope lines 平行線、垂直線、斜め線--------------------------------------------------
g18<-ggplot(iris, aes(y=Petal.Length, x=Petal.Width)) 
g18<-g18+geom_point(alpha=0.5,aes(colour= Species))

g18<-g18+geom_hline(yintercept = 5,size=2,linetype=2,colour="blue")#horizontal line

g18<-g18+geom_vline(xintercept = 1.7,size=1,linetype=3,colour="red")#vertical line

g18<-g18+geom_abline(slope = 1,intercept = 2,size=1,linetype=4,colour="darkgreen") # slope
g18

19. スムージング

g19.png

# 19. fitting  回帰直線など近似線を追加---------------------------------------------------
g19<-ggplot(iris, aes(y=Petal.Length, x=Petal.Width)) 
g19<-g19+geom_point(alpha=0.5,aes(colour= Species))
g19<-g19+stat_smooth(se=T,fullrange = T,level = 0.95) # slope
g19

デフォルトが多項式フィットです。stat_smoothのなかでmethod=を指定しなければ、いい感じのトレンドを得ることができます。 se=Tで95%信頼区間が出せます。fullrange=Fはデータの最大値最小値の範囲外まで線を伸ばすかどうかです。

20. 回帰直線

g20.png

グループごとにフィッティングする場合は, colourで塗り分けるグループを指定しましょう。

stat_smoothのなかでmethod=を”lm”にすると、線形モデルでのフィッティングになります。

#Group グループごとに、回帰直線を引く
g20<-ggplot(iris, aes(y=Petal.Length, x=Petal.Width,colour= Species)) 
g20<-g20+geom_point(alpha=0.5)
g20<-g20+stat_smooth(method = "lm",fullrange = T, se = T,aes(fill = Species),alpha=0.1) # slope
g20

最後に,全コードをつなげて貼っておきます。

Rファイルとして保存し、よく使うディレクトリにおいておけば、いつでも参照コピペしてグラフを仕上げることができます。

Enjoy!!

21. 全コードのまとめ

#########################################################################
#package: ggplot2
#########################################################################
invisible({rm(list=ls());gc();gc()})

library(ggplot2)
library(tidyverse)

#以下 全ggplotに適用(theme_set)するもの
#"グラフタイトル14pt",”日本語表示”
ggplot()+theme_set(theme_bw(base_size = 14,base_family="HiraKakuProN-W3"))


#
#
#備考: ggplot2はデータフレームなど整然な構造を持った
#      データ型しか受け付けない
#
#

#data.frame Example--------------------------------------------------
# read data
data(iris)
data(diamonds)


#data.frame
str(iris) # data.frame
head(iris)
    # Iris:アヤメ
    # Sepal: がく片
    # Petal: 花びら
    # Species.Setosa:(種)ヒオウギアヤメ
    # Species.Versicolor:(種) ハナショウブ
    # Species.Virginica: (種) カキツバタ

#データフレーム
str(diamonds)
head(diamonds)

# 1. scatter plot 散布図を書く------------------------------------
#ggplot()関数の中で、基本設定を定める。キャンバスの設定だと思えばOK
g1<-ggplot(iris, #データフレームirisを使うことを宣言
           aes(x=Sepal.Length, #x軸にはSepal.Lengthを使う
           y=Sepal.Width)) #y軸はSepal.Widthを

#ggplot()で作ったキャンバスに、geom_point()で散布図を上書き(+geom_point()を足す)する。
g1<-g1+geom_point(aes(colour=Species), x軸とy軸は上で設定したのでここでは書く必要なし。colour(線や点の色)をSpeciesごとに変えることを宣言
                  size=1, #点の大きさ
                  alpha=0.5) #透過性0.5
#描画
g1

# 2. line plot 時系列的な線つなぎ------------------------------------
g2<-ggplot(iris,aes(x=Sepal.Length,y=Sepal.Width)) # キャンバスを用意。x軸とy軸を宣言
g2<-g2+geom_line(aes(colour=Species),size=0.5) #線をgeom_line()で足す。x軸とy軸はキャンバスの設定時に宣言したので不要。
g2<-g2+geom_point(aes(colour=Species),size=1,alpha=0.5) #線の上に点(geom_point())を上書き
g2


# 3. density plot 確率密度------------------------------------
g3<-ggplot(iris,aes(x=Sepal.Length)) #確率密度曲線を描いていきたいので、y軸の宣言は不要です。確率密度がy軸になるので。
g3<-g3+geom_density(aes(fill=Species),size=0.5,alpha=0.5) #geom_density()を使います
g3<-g3+xlim(3,10) #x軸は3から10の範囲としましょう。
g3

# 4. histogram ヒストグラム------------------------------------
g4<-ggplot(iris,aes(x=Sepal.Length)) #x軸はSepal.Length。ヒストグラムのy軸は度数なので、ここでは指定不要
g4<-g4+geom_histogram(aes(fill=Species), #種類ごとに処理して塗り分け
                      bins=30, #棒は30本立てる
                      size=10, #横に表示するレジェンドのマーク?の大きさ
                       alpha=0.5) #透過性
g4

# 5 histogram and density ------------------------------------
#ヒストグラムと密度曲線”重ね書き”

#キャンバスを用意する
g5 <- ggplot(iris,  #irisをデータで使う
            aes(x = Sepal.Length, #x軸はSepal.Length
                y = ..density..,   #y軸を確率密度に合わせる(..density..を使う)
                colour = Species, #線はSpeciesごとに出して塗り分ける
                fill = Species #塗りつぶしもSpeciesごとに出して塗り分ける
                )
            )
g5 <- g5 + geom_histogram(   # ヒストグラム
    position = "identity",
    alpha = 0.5
    )
    
g5 <- g5 + geom_density(     # 密度曲線
    stat = "density",
    position = "identity",
    alpha = 0.5
    )
    
g5<-g5+xlim(3,10) #x軸の範囲

#描画
g5



#キャンバスを用意
g6<-ggplot(iris,aes(x=Sepal.Length,y=Sepal.Width))

g6<- g6+ geom_errorbar(aes(ymin=Sepal.Width-0.7, #エラーバーの下限値(ここではy軸の各Sepal.Widthデータに対して0.7を引いた)
                           ymax = Sepal.Width+0.7), #エラーバーの上限値
                       colour="gray40",
                       alpha=0.1,
                       size=1)
#エラーバーの上に、点を上書き
g6<- g6 + geom_point(aes(colour=Species),size=2,alpha=0.5)

#描画
g6


# 7. Mean Bar plot 棒グラフ------------------------------------
g7<-ggplot(iris, aes(y=Petal.Length, x=Species,fill = Species))  #キャンバスの用意。x軸y軸の指定。塗りつぶしを含む処理をSpeciesの種類ごとに行うことを宣言。

#stat_summary()で統計処理を行う。
#上でSpeciesごとに処理することを宣言したので、fun.yでSpeciesごとにy軸Petal.Lengthの平均を計算する。
#描画方法はbar(棒グラフ)
g7<-g7+stat_summary(fun.y=mean,geom="bar",alpha=0.5) 

#標準誤差はmean_cl_normalで計算、ここでの標準誤差は,上で指定したfill=Speciesの種類ごとに計算される

###########################################
#注)データが正規分布であると仮定した歳の標準誤差と信頼区間です。
#   データが比率である場合などは、これで出してはいけません
###########################################

g7<-g7+stat_summary(fun.data=mean_cl_normal,geom="errorbar",alpha=0.5,size=0.3,width=0.3)

#95%信頼区間をエラーバーにしたい場合はmean_sdl
#g7<-g7+stat_summary(fun.data = mean_sdl, geom = "errorbar",alpha=0.5,size=0.3,width=0.3)

#描画
g7


# 8. violin plot  ヴァイオリンプロット------------------------------------
g8<-ggplot(iris, aes(y=Petal.Length, x=Species,fill = Species)) 
g8<-g8+geom_violin(alpha=0.5,colour="gray")

# 描画
g8



# 9. box plot 箱ひげ図------------------------------------
g9<-ggplot(iris, aes(y=Petal.Length, x=Species,fill = Species)) 
g9<-g9+geom_boxplot(alpha=0.5,colour="gray30")
g9


#10. グラフとレジェンドタイトル&テキストの変更--------------------------------------------------------------
#ベースとなる図。今回は上の箱ひげ図。
g10<-ggplot(iris, aes(y=Petal.Length, x=Species,fill = Species)) 
g10<-g10+geom_boxplot(alpha=0.5,colour="gray30")

#グラフのタイトルサイズはbase_sizeで変更
g10<-g10+theme_bw(base_size=14,base_family="HiraKakuProN-W3") # Graph Title Size and Font

#軸のタイトルのサイズ。カラーを変えたりもできますが、今回は黒のままで
g10 <- g10 + theme(axis.title.x = element_text(size=14), #axis title letter size
               axis.title.y = element_text(size=14)) 

#軸のテキストのサイズ。カラーを変えたりもできますが、今回は黒のままで
g10 <- g10 + theme(axis.text.x = element_text(size=12),  #axis text letter size 
              axis.text.y = element_text(size=12))   

#グラフの右に出るレジェンドのタイトルサイズと、その下についている項目のテキストサイズ
g10 <- g10 + theme(legend.title = element_text(size=14), #legend size
              legend.text = element_text(size=10),  #legend text size 
              legend.key= element_rect(colour = "white")) # legend mark-box colour

#レジェンドのタイトルと項目の内容を変更
g10 <- g10 + labs(fill = "アヤメの品種") #colour で分けている場合は,colour = "アヤメの品種"
g10 <- g10 + scale_fill_hue(name = "アヤメの品種", 
                        labels = c(setosa = "ヒオウギアヤメ", 
                                   versicolor ="ハナショウブ",
                                   virginica = "カキツバタ") ) 
#軸名の変更
g10 <- g10 + ylab("花びらの長さ(Petal.Length)")
g10 <- g10 + xlab("アヤメの品種")

#グラフタイトルの変更
g10 <- g10 + ggtitle("アヤメの品種ごとの花びらの長さ")

#描画
g10


#11. グラフの分割1--------------------------------------------------------------
g11 <- ggplot(data=diamonds, aes(x=price,fill=cut)) #ダイヤモンドのデータ。x軸に価格。カットサイズごとに処理、塗り分け。
#ヒストグラムを書く。x軸は価格。安いダイヤモンドは多い。高額なモノは貴重なので少ない。
g11 <- g11 + geom_histogram(alpha=0.5) 

#カットの種類ごとにfacet_wrapする。要するに分割。
g11 <- g11 + facet_wrap(~cut)

#描画
g11


#12. グラフの分割2--------------------------------------------------------------
g12 <- ggplot(data=diamonds, aes(x=price,fill=cut))
g12 <- g12 + geom_histogram(alpha=0.5) 
g12 <- g12 + facet_wrap(~cut, ncol=5) #5列に並べる
g12

#13. グラフの分割3--------------------------------------------------------------
#facet row and col 行と列
g13 <- ggplot(data=diamonds, aes(x=price,fill=cut))
g13 <- g13 + geom_histogram(alpha=0.5) 
g13 <- g13 + facet_wrap(~cut, ncol=2,nrow=3) #2列3行に並べる
g13


#14.テキストの挿入----------------------------------------------------------------------
g14<-ggplot(iris, aes(y=Petal.Length, x=Species)) 
g14<-g14+geom_boxplot(alpha=0.5,colour="gray30",aes(fill = Species))

#Setosa
g14<-g14+geom_text(aes(x=1,y=2.5,label="Setosa"),colour="gray30" ,size=6,hjust = 0.5, vjust = 1)

#Versicolor
g14<-g14+geom_text(aes(x=2,y=5.5,label="Versicolor"),colour="gray30" ,size=6,hjust = 0.5, vjust = 1)

#Virginica
g14<-g14+geom_text(aes(x=3,y=7,label="Virginica"),colour="gray30" ,size=6,hjust = 0.5, vjust = 1)
g14


#sequential palette 連続グラデーションの例
g15<-ggplot(diamonds,aes(carat, price))+
    geom_point(aes(colour = clarity))
g15 <- g15 + scale_color_brewer(palette="BuGn") # Scale color 
g15


#discrete palette 離散塗り分け
g15 <- ggplot(data=diamonds, aes(x=carat))
g15 <- g15 + geom_histogram(aes(fill=cut),alpha=0.5) 
g15 <- g15 + scale_fill_brewer(palette="Spectral") #Scale Fill 
g15

#Colour Variations
 #Sequential(連続カラー): Blues BuGn BuPu GnBu Greens Greys Oranges OrRd PuBu PuBuGn PuRd Purples RdPu Reds YlGn YlGnBu YlOrBr YlOrRd
 #Discrete(離散カラー)  : BrBG PiYG PRGn PuOr RdBu RdGy RdYlBu RdYlGn Spectral
 
 
# 16.TransPosition X軸とY軸を転置する------------------------------------------------
g16<-ggplot(iris, aes(y=Petal.Length, x=Species,fill = Species)) 
g16<-g16+geom_violin(alpha=0.5,colour="gray")

#この一行で転置できる
g16<-g16+coord_flip() #Transposition
g16


# 17. グラフテーマの変更-----------------------------------------------------
#base density plot
g17<-ggplot(iris,aes(x=Sepal.Length))
g17<-g17+geom_density(aes(fill=Species),size=0.5,alpha=0.5)
g17<-g17+xlim(3,10)


#set Theme
g17<-g17+theme_bw() #white background and grid lines
g17

g17<-g17+theme_dark() #dark back ground
g17

g17<-g17+theme_gray() #gray basic
g17

g17<-g17+theme_light() 

g17

g17<-g17+theme_linedraw() 
g17

g17<-g17+theme_minimal() 
g17

g17<-g17+theme_void() 
g17

g17<-g17+theme_classic() #classic
g17

# 18. horizontal/vertical/Slope lines 平行線、垂直線、斜め線--------------------------------------------------
g18<-ggplot(iris, aes(y=Petal.Length, x=Petal.Width)) 
g18<-g18+geom_point(alpha=0.5,aes(colour= Species))

g18<-g18+geom_hline(yintercept = 5,size=2,linetype=2,colour="blue")#horizontal line

g18<-g18+geom_vline(xintercept = 1.7,size=1,linetype=3,colour="red")#vertical line

g18<-g18+geom_abline(slope = 1,intercept = 2,size=1,linetype=4,colour="darkgreen") # slope
g18

# 19. fitting  回帰直線など近似線を追加---------------------------------------------------
g19<-ggplot(iris, aes(y=Petal.Length, x=Petal.Width)) 
g19<-g19+geom_point(alpha=0.5,aes(colour= Species))
g19<-g19+stat_smooth(se=T,fullrange = T,level = 0.95) # slope
g19


#Group グループごとに、回帰直線を引く
g20<-ggplot(iris, aes(y=Petal.Length, x=Petal.Width,colour= Species)) 
g20<-g20+geom_point(alpha=0.5)
g20<-g20+stat_smooth(method = "lm",fullrange = T, se = T,aes(fill = Species),alpha=0.1) # slope
g20


#Fin
Written on January 16, 2017