R グラフ 凡例の調整 legendのオプション

バイオインフォ道場、くまぞうです。

グラフを描いたとき、図の仕上がりで「凡例」が気になる場合がありませんか?工夫できるポイントを紹介します。

スポンサーリンク



R 凡例(legend)の細かい調整

グラフでよく使うヒストグラムを例にして凡例の細かい調整を行います。他のグラフでも同様に活用できます。

ヒストグラム 複数のグラフを重ねる

hist(
  rnorm(1000, mean=-2, sd=1), 
  xlim=c(-10, 10), ylim=c(0, 250),
  col="#ff000020",
  main="rnorm", xlab="range")
hist(
  rnorm(1000, mean=2, sd=1),
  xlim=c(-10, 10), ylim=c(0, 250),
  col="#0000ff20",
  main="rnorm", xlab="range",
  add=TRUE)

凡例をつける

legendで文字列のベクターを与えれば、「凡例」を簡単に表示できます。しかし、複数のグラフを区別したい場合、テキストの情報だけでは区別ができません。通常、凡例テキストの前にマークをつけるなどの工夫を行います。さらに、この場合に限ってはマークが無いにもかかわらず、凡例内に無駄な余白があって凡例がすっきりしません。

hist(
  rnorm(1000, mean=-2, sd=1), 
  xlim=c(-10, 10), ylim=c(0, 250),
  col="#ff000020",
  main="rnorm", xlab="range")
hist(
  rnorm(1000, mean=2, sd=1),
  xlim=c(-10, 10), ylim=c(0, 250),
  col="#0000ff20",
  main="rnorm", xlab="range",
  add=TRUE)
legend("topright", legend=c("sample1", "sample2"))

legend 凡例マーク

識別マークをつけます。legend関数のltyオプションを指定すると、ラインパターンで識別できるようになります。ヒストグラムの場合はこのマークは適しません。しかし、グラフを複数重ねる場合によく用いられる折れ線グラフでは、データのパターンと凡例のパターンに同じ番号を指定して使うことで識別が容易になります。

凡例マーク ライン

hist(
  rnorm(1000, mean=-2, sd=1), 
  xlim=c(-10, 10), ylim=c(0, 250),
  col="#ff000020",
  main="rnorm", xlab="range")
hist(
  rnorm(1000, mean=2, sd=1),
  xlim=c(-10, 10), ylim=c(0, 250),
  col="#0000ff20",
  main="rnorm", xlab="range",
  add=TRUE)
legend("topright", legend=c("sample1", "sample2"), lty=c(1,2))

plot(sin, xlim=c(0,5), ylim=c(-1,1), ann=F)
par(new=T)
plot(cos, xlim=c(0,5), ylim=c(-1,1), lty=2, ylab="sin(x), cos(x)")
legend("topright", lty=1:2, legend=c("sin", "cos"))

凡例マーク 四角形

ヒストグラムの場合は、識別マークはfillオプションを指定した方がピッタリです。データと同じ色をベクターで指定します。

hist(
  rnorm(1000, mean=-2, sd=1), 
  xlim=c(-10, 10), ylim=c(0, 250),
  col="#ff000020",
  main="rnorm", xlab="range")
hist(
  rnorm(1000, mean=2, sd=1),
  xlim=c(-10, 10), ylim=c(0, 250),
  col="#0000ff20",
  main="rnorm", xlab="range",
  add=TRUE)
legend("topright", legend=c("sample1", "sample2"), fill=c("#ff000020", "#0000ff20"))

legend 凡例内の位置調整

マークを付けない場合は、凡例内に無駄な余白ができるので位置を調整します。x.interspオプションを使います。凡例のマークがないときは、x.interspの値を0にすると余分な余白がなくなります。指定する値を大きくすると、マークとテキストの間隔が広がります。縦の間隔を調整する場合は、y.interspです。同様に値を大きくすると、間隔が広くなります。

余分な余白をなくす(凡例マークなし)

hist(
  rnorm(1000, mean=-2, sd=1), 
  xlim=c(-10, 10), ylim=c(0, 250),
  col="#ff000020",
  main="rnorm", xlab="range")
hist(
  rnorm(1000, mean=2, sd=1),
  xlim=c(-10, 10), ylim=c(0, 250),
  col="#0000ff20",
  main="rnorm", xlab="range",
  add=TRUE)
legend("topright", legend=c("sample1", "sample2"), x.intersp=0)

凡例 マークとテキストの間隔を広くする

legend("topright", legend=c("sample1", "sample2"), x.intersp=20)

凡例 縦の間隔を広くする

legend("topright", legend=c("sample1", "sample2"), y.intersp=10)

legend 色調整

ltyfillオプションを使わない場合、色で識別することもできます。text.colオプションを使います。データと同じ色をベクターで指定します。

hist(
  rnorm(1000, mean=-2, sd=1), 
  xlim=c(-10, 10), ylim=c(0, 250),
  col="#ff000020",
  main="rnorm", xlab="range")
hist(
  rnorm(1000, mean=2, sd=1),
  xlim=c(-10, 10), ylim=c(0, 250),
  col="#0000ff20",
  main="rnorm", xlab="range",
  add=TRUE)
legend("topright", legend=c("sample1", "sample2"), text.col=c("#ff000020", "#0000ff20"), x.intersp=0)

スポンサーリンク