web-dev-qa-db-ja.com

ggplot2で凡例を移動または配置する方法

プロットの下に凡例を含むggplot2プロットを作成しようとしています。

Ggplot2の本はp 112で、「凡例の位置と位置調整は、legend.positionのテーマ設定によって制御され、値は、右、左、上、下、なし(凡例なし)、または数値位置にすることができます。

次のコードは動作します(「右」がデフォルトであるため)。また、凡例位置として「なし」でも動作しますが、「左」、「上」、「下」はすべて「grid.Callのエラー」で失敗します.graphics( "L_setviewport"、pvp、TRUE):ビューポートの非有限の位置および/またはサイズ "

library(ggplot2)
(myDat <- data.frame(cbind(VarX=10:1, VarY=runif(10)), 
    Descrip=sample(LETTERS[1:3], 10, replace=TRUE)))
qplot(VarX,VarY, data=myDat, shape=Descrip) + 
    opts(legend.position="right")

私は何を間違えていますか?伝説を再配置することは信じられないほど一般的でなければならないので、私はそれが私だと考えています。

58
Dan Goldstein

バージョン> 0.9.3(optsが非推奨の場合)

_theme(legend.position = "bottom")
_

旧バージョン:

残念ながら、これはggplot2のバグであり、この夏に修正することを本当に望んでいます。

更新:

opts(legend.position = "left")に関連するバグは、最新バージョンのggplot2を使用して修正されました。さらに、バージョン0.9.0では_guide_legend_および_guide_colorbar_が導入され、凡例内のアイテムの外観と配置をより細かく制御できるようになりました。たとえば、この機能は、凡例項目の行と列の数を指定します。

58
hadley

私がここにいる間に、これらの答えをほんの少し更新します。ハドリーが述べたように、theme(legend.position = "bottom")を使用して凡例を下に移動できます。

または、手動で移動しますtheme(legend.position = c(.2,.85))

凡例を水平にしたい場合は、theme(legend.position = c(.2,.85), legend.direction = "horizontal")を使用します

4
SoilSciGuy

凡例を手動でいつでも配置できますが、ラベルはまだ積み重ねられている/垂直であるため、見た目がくなります。 hadleyがこれを修正する時間を見つけることを本当に願っています:-)

p <- qplot(VarX,VarY, data=myDat, shape=Descrip) + 
opts(legend.position=c(.5,0.9),plot.margin = unit(c(6,0,0,0), "lines"))
3
Andreas

_ggplot2_の新しいバージョンでは、+ theme(legend.position='bottom')を使用できます。

_qplot(VarX,VarY, data=myDat, shape=Descrip) + 
  theme(legend.position='bottom')
_

enter image description here

Rのクックブック-凡例 を参照してください。

コメントへの応答として、theme_update()はggplotの途中で呼び出された場合は起動しません(+ theme_update()のように、それ以降のみ。また、アクティブなテーマを変更するだけではなく、特定のプロットです。これを行うことができます。

_theme_update(legend.position='bottom')
qplot(VarX,VarY, data=myDat, shape=Descrip) 
_

上記の結果で、違いは、後続のプロットもデフォルトで下部の凡例になることです。

2
C8H10N4O2