凡例ggplot 2.2を削除します


250

1つのレイヤーの凡例を維持し(滑らか)、もう1つのレイヤーの凡例(ポイント)を削除しようとしています。とで伝説を止めようguides(colour = FALSE)としましたgeom_point(aes(color = vs), show.legend = FALSE)

編集:この質問とその回答は人気があるため、再現可能な例が順番に表示されます:

library(ggplot2)
ggplot(data = mtcars, aes(x = mpg, y = disp, group = gear)) +
geom_point(aes(color = vs)) +
geom_point(aes(shape = factor(cyl))) +
geom_line(aes(linetype = factor(gear))) +
geom_smooth(aes(fill = factor(gear), color = gear)) + 
theme_bw() 

ここに画像の説明を入力してください


5
最小限の再現可能な例の方がはるかに簡単です。コードの長い行には、(当面の問題に対して)不要なコードがたくさんあるだけでなく、現在書かれているように完全に再生できないように見えます。
mnel 2016

回答:


445

rクックブックから、ここでbpはあなたのggplotです:

特定の美的要素の凡例を削除(塗りつぶし):

bp + guides(fill=FALSE)

スケールを指定するときにも実行できます。

bp + scale_fill_discrete(guide=FALSE)

これにより、すべての凡例が削除されます。

bp + theme(legend.position="none")

25
@Alexによるコメントへの返信として:theme_bw()を使用して行われた定義に干渉する可能性があることに注意してくださいtheme()。を使用theme_bw()する場合は、他のテーマオプションを変更する前に、必ずプロットに追加してください。
fabern 2017

1
しかし、私がこのようなことをするbp + theme(legend.position="none") + theme_classic()と、伝説が戻ってきます。それを削除するにはどうすればよいですか?
loveR

3
@loveRはtheme_classicを最初に配置しました:bp + theme_classic() + theme(legend.position="none")
仮説

1
これは私の陰謀に影響を与えませんでした。@Tjeboのアプローチをうまく使いました。
James Hirschorn

80

これには別の解決策があるかもしれません:
あなたのコードは:

geom_point(aes(..., show.legend = FALSE))

あなたは指定することができshow.legend、パラメータの後にaesコール:

geom_point(aes(...), show.legend = FALSE)

その後、対応する凡例が消えます


3
これは非常に優れたアプローチです。より直感的にも。
patL 2018

2
これは、geom_textを使用して線に色で注釈を付けるときに、凡例から文字を削除するために機能したソリューションでした。scale_labelコマンドはなく(これも意味guide(label = FALSE)がありません)、動作しませんでした。ありがとう!
Melissa Key

45

質問とuser3490026の回答は検索のヒット数が多いため、再現可能な例と、これまでに行った提案の簡単な説明と、OPの質問に明示的に対処するソリューションを作成しました。

ggplot2特定の凡例が同じ変数に関連付けられている場合、それが自動的にブレンドされて混乱を招く可能性があることの1つです。例えば、factor(gear)のため1回、2回表示されlinetype、一度のためにfill組み合わせた伝説が得られ、。対照的に、gearと同じように扱われないため、独自の凡例エントリがありfactor(gear)ます。これまでに提供されたソリューションは通常、うまく機能します。ただし、場合によっては、ガイドを上書きする必要があります。一番下の最後の例を見てください。

# reproducible example:
library(ggplot2)
p <- ggplot(data = mtcars, aes(x = mpg, y = disp, group = gear)) +
geom_point(aes(color = vs)) +
geom_point(aes(shape = factor(cyl))) +
geom_line(aes(linetype = factor(gear))) +
geom_smooth(aes(fill = factor(gear), color = gear)) + 
theme_bw() 

ここに画像の説明を入力してください

すべての凡例を削除:@ user3490026

p + theme(legend.position = "none")

すべての凡例を削除:@duhaime

p + guides(fill = FALSE, color = FALSE, linetype = FALSE, shape = FALSE)

凡例をオフにする:@Tjebo

ggplot(data = mtcars, aes(x = mpg, y = disp, group = gear)) +
geom_point(aes(color = vs), show.legend = FALSE) +
geom_point(aes(shape = factor(cyl)), show.legend = FALSE) +
geom_line(aes(linetype = factor(gear)), show.legend = FALSE) +
geom_smooth(aes(fill = factor(gear), color = gear), show.legend = FALSE) + 
theme_bw() 

線種が見えるように塗りつぶしを削除します

p + guides(fill = FALSE)

上記と同様に、scale_fill_関数を使用します。

p + scale_fill_discrete(guide = FALSE)

そして今、OPの要求に対する1つの可能な答え

「1つのレイヤーの凡例を保持し(スムーズ)、もう1つのレイヤーの凡例を削除するには(ポイント)」

アドホックポストホックをオフにする

p + guides(fill = guide_legend(override.aes = list(color = NA)), 
           color = FALSE, 
           shape = FALSE)  

ここに画像の説明を入力してください


2
最後のプロットの青い塗りつぶしの色がグラフに表示されないことに気づきましたが、理由は
わかり

入力warnings()あなたのコードを実行し、あなたが」青いリボンの理由(複数可)が表示されない参照のでしょ後。
マーカス

@markus:ありがとうございます!問題は別なので、私はわざわざ例を編集するつもりはありません。ただし、se計算されない場合に凡例を付けることはほとんど意味がありません。おそらくgithubで問題に値するでしょうが、私は今のところエネルギーを持っていません...
PatrickT

13

チャートでfillcolor審美性の両方を使用している場合は、次のようにして凡例を削除できます。

+ guides(fill=FALSE, color=FALSE)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.