범례 ggplot 2.2 제거


250

한 레이어의 범례를 유지하고 (부드럽게) 다른 레이어의 범례를 제거하려고합니다 (포인트). 내가 가진 전설을 차단 시도 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

답변:


445

에서 R 요리 책 혈압이 ggplot입니다 :

특정 미학에 대한 범례 제거 (채우기) :

bp + guides(fill=FALSE)

스케일을 지정할 때도 수행 할 수 있습니다.

bp + scale_fill_discrete(guide=FALSE)

이렇게하면 모든 범례가 제거됩니다.

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

25
@Alex의 의견에 대한 답변으로 :을 theme_bw()사용하여 수행 된 모든 정의를 방해 할 수 있습니다 theme(). 을 사용할 때는 theme_bw()다른 테마 옵션을 변경하기 전에 플롯에 추가해야합니다.
fabern

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

2
이것은 geom_text를 사용하여 선에 색상을 주석 처리 할 때 범례에서 문자를 제거하는 솔루션이었습니다. scale_label명령 이없고 (이것도 의미 guide(label = FALSE)가 없습니다) 작동하지 않았습니다. 감사!
Melissa Key

45

질문과 user3490026 의 답변이 인기 검색어이므로, OP의 질문을 명시 적으로 다루는 솔루션과 함께 지금까지 제안 된 제안에 대한 간단한 예와 재현 가능한 예를 만들었습니다.

ggplot2혼동 할 수있는 작업 중 하나는 동일한 변수와 연관된 특정 범례를 자동으로 혼합한다는 것입니다. 예를 들어, factor(gear)에 한 번, 두 번 표시 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 요청에 대한 가능한 답변

"한 레이어의 범례를 유지하고 (부드럽게) 다른 레이어의 범례를 제거하려면 (포인트)"

임시 포스트-혹은 일부를 끄십시오

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

여기에 이미지 설명을 입력하십시오


2
마지막 플롯에서 파란색 채우기 색상이 그래프에 나타나지 않는 것을
알았습니다.

warnings()코드를 실행 한 후 입력 하면 파란색 리본이 표시되지 않는 이유가 표시됩니다.
markus

@markus : 감사합니다! 문제가 분리되어 있기 때문에 예제를 편집하지 않아도됩니다. 그러나 se계산되지 않을 때 범례를 갖는 것은 의미 가 없습니다. 아마도 github에서 문제가
될만한

13

차트 fillcolor미학을 모두 사용하는 경우 다음을 사용 하여 범례를 제거 할 수 있습니다.

+ guides(fill=FALSE, color=FALSE)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.