Mukku John Blog

取り組んでいること を つらつら と

ggplot2を使って、軸を制御する-2

R グラフィックス クックブック 23回目

ggplot2パッケージを利用して、軸を制御していきます。
今回は、軸のスケール比や目盛り軸を手動で設定します。

軸のスケール

こちらのデータセットを使います。
ハーフマラソンフルマラソンのタイムのデータです。

> str(marathon)
'data.frame':	520 obs. of  2 variables:
 $ Half: num  66.8 67.9 68.7 69.9 70 ...
 $ Full: num  141 147 148 157 147 ...

> head(marathon)
      Half     Full
1 66.80000 141.4833
2 67.88333 147.2667
3 68.70000 147.8833
4 69.90000 156.7500
5 69.95000 147.4333
6 70.11667 150.0000
sp <- ggplot(marathon, aes(x=Half, y=Full)) + geom_point()
sp

f:id:MukkuJohn:20161008150150p:plain

x軸が30m間隔、y軸が50m間隔になっていますが、どちらの軸も同じ指標です。
同じ指標ですので、軸は同じ間隔に揃えた方が、分布が分かりやすいです。

同じ間隔に揃えるためには、coord_fixed()を使い、さらに、
scale_y_continuous()scale_x_continuous()breaks引数を指定します。

#0-420の間を30間隔にします
sp + coord_fixed() +
  scale_y_continuous(breaks=seq(0,420,30))+
  scale_x_continuous(breaks=seq(0,420,30))

f:id:MukkuJohn:20161008151144p:plain

この散布図は、ハーフマラソンフルマラソンのタイムの分布のため
x軸のハーフマラソン側を、y軸のフルマラソンのスケールの1/2にした方が伝わりやすいかもしれません。

スケール比率を変更するためには、coord_fixed()ratio引数を指定します。

sp + coord_fixed(ratio=1/2) +
  scale_y_continuous(breaks=seq(0,420,30))+
  scale_x_continuous(breaks=seq(0,420,15))

f:id:MukkuJohn:20161008151446p:plain

目盛りの位置

ここからは、R: Results from an Experiment on Plant Growthを使います。

p <- ggplot(PlantGrowth, aes(x=group,y=weight)) + 
  geom_boxplot()
p

f:id:MukkuJohn:20161008152052p:plain

デフォルトで適切な位置に目盛りを設定してくれますが、手動で設定するためには、
scale_y_continuous()scale_x_continuous()breaks引数を指定します。

p + scale_y_continuous(breaks=c(4,4.25,4.5,5,6,8))

f:id:MukkuJohn:20161008152233p:plain

指定した目盛りが適用されるのは、主目盛り線になります。
補助目盛り線は、主目盛り線の中間の位置に描かれます。

等間隔で、breaks引数を指定する際に、seq()関数や:演算子を使うと楽です。

> seq(4,7,by=.5)
[1] 4.0 4.5 5.0 5.5 6.0 6.5 7.0
> 5:10
[1]  5  6  7  8  9 10

離散値の軸に対しては、scale_x_discrete()scale_y_discrete()関数に、
limits引数を指定して、順序の設定と要素の除外を行い、
breaks引数を指定して、ラベルの表示設定を行います。

#trt2とctrl列だけを表示して、ctrlだけラベルで設定する
p + scale_x_discrete(limits=c("trt2","ctrl"),breaks="ctrl") 

f:id:MukkuJohn:20161008153118p:plain

目盛りとラベルの非表示

目盛りのラベルを非表示にする場合は、theme()axis.text.y引数や
axis.text.x引数に、element_blank()を指定します。

#y軸の目盛りラベルを非表示にします
p + theme(axis.text.y = element_blank())

f:id:MukkuJohn:20161008153639p:plain

チョコっと出ている黒い目盛り記号を非表示するには、
axis.ticks引数に、element_blank()を指定します。

#軸の指定がないため、両方の軸の目盛り記号が非表示になります。
p + theme(axis.ticks = element_blank(), axis.text.y = element_blank())

f:id:MukkuJohn:20161008153948p:plain

主目盛り線を非表示にするには、
scale_y_continuous()scale_x_continuous()関数の
breaks引数に、NULLを指定します。

#y軸の目盛り線を非表示にします。
p + scale_y_continuous(breaks=NULL)

f:id:MukkuJohn:20161008154148p:plain


目盛りに関して、制御できる項目は3か所です。

  • 目盛りラベル
  • 目盛り記号(黒いチョッとだけで出てる線)
  • 目盛り線

軸内の位置指定は、軸が連続値か離散値で指定方法が異なります。

  • 連続値:breaksで指定する(非表示にするには、NULLを指定する)
  • 離散値:limitsで指定する(非表示にするには、その要素を含めない)

目盛りラベル、目盛り線は、軸ごとに制御可能ですが、
目盛り記号だけは、両軸に適用されてします。

次回は、目盛りラベルのテキストや、軸ラベルのテキストを制御します。