ggplot에서 범례 제목을 변경하는 방법


299

나는 다음과 같은 줄거리를 가지고있다. 이 명령으로 작성되었습니다.

library(ggplot2)

df <- data.frame(cond = factor(rep(c("A", "B"), each = 200)), 
                 rating = c(rnorm(200), rnorm(200, mean=.8)))

ggplot(df, aes(x=rating, fill=cond)) + 
geom_density(alpha = .3) +
xlab("NEW RATING TITLE") +
ylab("NEW DENSITY TITLE")

다음으로 할 일은 범례 제목cond 에서 NEW LEGEND TITLE 로 수정하는 것 입니다.

그래서 내가 한 것은 위의 코드 끝에 다음 줄을 추가하는 것입니다.

+labs(colour="NEW LEGEND TITLE")

그러나 작동하지 않습니다. 올바른 방법은 무엇입니까?

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


110
labs(fill="xyz")해야한다
침례

1
@baptiste 나는 당신의 의견을 눈치 채지 않고이 질문에 여러 번 되돌아 왔습니다. 답으로 쓸 수 있습니까? IMO는 가장 간단한 솔루션이며 인정받을만한 가치가 있습니다
User632716

3
@ User632716 그것은 이미 누군가의 대답입니다
baptiste

7
작동하지 않습니다 ...
shenglih

1
여러 geom_문장 이있는 플롯과 관련된 답변을 찾고있는 사람들 은 stackoverflow.com/a/38485985/1169233 의 답변을 추천합니다 .
Waldir Leoncio

답변:


347

이것은 작동해야합니다 :

p <- ggplot(df, aes(x=rating, fill=cond)) + 
           geom_density(alpha=.3) + 
           xlab("NEW RATING TITLE") + 
           ylab("NEW DENSITY TITLE")
p <- p + guides(fill=guide_legend(title="New Legend Title"))

(또는 대안으로)

p + scale_fill_discrete(name = "New Legend Title")

10
다른 대안은 다음과 같습니다p$labels$fill <- "New Legend Title"
Alex Holcombe

3
가이드와 scale_fill_discrete의 차이점
Medhat

18
p$labels$fill나를 위해 일하지 않았다. 로 ggplot2_2.1.0I 사용p$labels$colour <- "New legend title"
ClementWalter

4
p$labels$fill aes에서 미학 (선형, 색상, 모양)에 둘 이상의 변수를 사용하는 경우 각각 개별적으로 변경해야합니다.
discipulus

226

나는 이것을 많이 파지 않았지만 ggplot ()에서 fill = cond 를 사용했기 때문에 ,

 + labs(color='NEW LEGEND TITLE') 

작동하지 않았을 수 있습니다. 그러나 채우기로 색상바꾸면 작동합니다!

+ labs(fill='NEW LEGEND TITLE') 

이것은 ggplot2_2.1.0에서 나를 위해 일했습니다.


20
이것이 가장 명백한 답변이라고 생각합니다. OP가 최대 한 줄을 추가로 요구하는 것과 정확히 일치합니다
Leo

3
color =와 fill = 둘 다 작동합니다. 이것은 질문에 대한 "올바른"답변입니다.
Dan

3
채우기 색상의 작동 여부는 실제로 "cond"(또는 다른 경우 그룹)에 따라 다릅니다. 좋은 설명은 cookbook-r.com/Graphs/Legends_(ggplot2)
user1442363

3
이것이 가장 좋은 대답입니다.
Akshay Gaur

1
이 솔루션은 작동하지 않았다 3.0 ggplot2에 : : 참고하여 해결p + guides(fill=guide_legend(title="New Legend Title"))
수만 스 나사로

39

밀도가 두 개이므로를 사용하여 자신 만의 색상을 설정하고 싶을 것입니다 scale_fill_manual.

그렇다면 다음을 수행 할 수 있습니다.

df <- data.frame(x=1:10,group=c(rep("a",5),rep("b",5)))

legend_title <- "OMG My Title"

ggplot(df, aes(x=x, fill=group)) + geom_density(alpha=.3) +   
    scale_fill_manual(legend_title,values=c("orange","red"))

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


27

위 코드 중 어느 것도 나를 위해 일하지 않았습니다.

여기 내가 찾은 것이 있고 효과가있었습니다.

labs(color = "sale year")

\n끝에 추가하여 제목과 디스플레이 사이에 공백을 둘 수도 있습니다 .

labs(color = 'sale year\n")


2
이 답변 과 다른 점은 무엇입니까?
merv

3
그렇습니다. 위의 모든 예제를 시도했지만 이것이 나를 위해 유일 한 것입니다. 감사!
SummerEla

이 작업이 원래의 포스트 질문을 어떻게 주었을 까요? (또는 ) fill대신에 필요한 것 같습니다 . 질문 시간이 주어지면 버전과 관련 이있을 수 있습니다 . colorcolourggplot2
steveb

1
@merv 가장 큰 차이점은 이것이 실제로 작동한다는 것입니다.
Luís de Sousa

16

코드 ggplot(data, fill= cond)에서 히스토그램을 만드는 데 사용 했으므로 레이블 섹션에서 "fill"을 사용하여 범례 제목을 추가해야합니다 +labs(fill="Title name"). 코드가 ggplot (data, colour = cond) 인 다른 유형의 플롯을 사용하는 경우을 사용할 수 있습니다 +labs(colour= "Title Name"). 요약하면 랩 인수는 aes 인수와 일치해야합니다.

+ guides(fill=guide_legend("my awesome title"))geom_bar 플롯에서 범례 제목을 변경하는 데 사용 했지만 geom_point에서는 작동하지 않는 것 같습니다.


...,하지만 geom_point()이 작업은 저에게 효과적입니다.guides(color=guide_legend("Type:"))
knb

1
@knb, 당신의 방법은 작동합니다 :guides(color=guide_legend("Score Ranking:"))
bmc

1
이 답변 과 다른 점은 무엇입니까?
merv

6

간단한 그래프에 사용할 수있는 또 다른 매우 간단한 답변이 있습니다.

guide_legend () 호출을 그래프에 추가하십시오.

ggplot(...) + ... + guide_legend(title="my awesome title")

아주 좋은 ggplot 문서에 표시된 것처럼 .

그래도 문제가 해결되지 않으면 가이드 호출을 통해 가이드 매개 변수를보다 정확하게 설정할 수 있습니다 .

ggplot(...) + ... + guides(fill=guide_legend("my awesome title"))

호출 할 guides때 이러한 매개 변수를 지정하여 모양 / 색상 / 크기를 변경할 수도 있습니다 .


26
이것은 나에게는 qplot(…) + guides(color=guide_legend(title="sale year"))효과가 없었지만 효과가 있었다
Arnaud A

3

목록에 추가하기 위해 (여기에서 다른 옵션은 작동하지 않음) ggplot에 update_labels 함수를 사용할 수도 있습니다.

p <- ggplot(df, aes(x=rating, fill=cond)) + 
           geom_density(alpha=.3) + 
           xlab("NEW RATING TITLE") + 
           ylab("NEW DENSITY TITLE")
update_labels(p, list(colour="MY NEW LEGEND TITLE")

또한 별도의 줄을 사용하여 x 축 및 y 축 레이블을 변경할 수 있습니다.

update_labels(p, list(x="NEW X LABEL",y="NEW Y LABEL")

2

ggboxplot ()의 legend.title을 변경 / 지정하는 두 가지 방법이 있습니다.

library(ggpubr)

bxp.defaultLegend <- ggboxplot(ToothGrowth, x = "dose", y = "len",
                               color = "dose", palette = "jco")

# Solution 1, setup legend.title directly in ggboxplot()
bxp.legend <- ggboxplot(ToothGrowth, x = "dose", y = "len",
                 color = "dose", palette = "jco", legend.title="Dose (mg)")

# Solution 2: Change legend title and appearnace in ggboxplot() using labs() and theme() option:
plot1 <-  bxp.defaultLegend + labs(color = "Dose (mg)") +
  theme(legend.title = element_text(color = "blue", size = 10), legend.text = element_text(color = "red"))

ggarrange(list(bxp.legend, bxp.defaultLegend, plot1), nrow = 1, ncol = 3,  common.legend = TRUE)

코드는 GitHub예제를 기반으로 수정 됩니다.


1

내 ggplot에서 facet_wrap을 사용하고 있으며 ArnaudA의 솔루션을 제외하고 제안 된 솔루션 중 어느 것도 나를 위해 일하지 않았습니다.

qplot() + guides(color=guide_legend(title="sale year")) 

1

많은 사람들은 공백이 포함 된 R에 테이블을로드 할 수 있다는 것을 모르기 때문에 레이블, 범례 레이블, 제목 및 축 이름을 변경하는 데 많은 시간을 소비합니다 " ". 그러나 이렇게하면 탭으로 구분 된 테이블 (또는 기본 또는 단일 공백 ​​이외의 다른 구분 기호)을로드 할 때 구분 기호를 지정하여 시간을 절약하거나 코드 크기를 줄일 수 있습니다.

read.table(sep = '\t')

또는 csv 형식의 기본 로딩 매개 변수를 사용하여 :

read.csv()

"NEW LEGEND TITLE", 모든 플롯에서 새 범례 제목을 지정하지 않도록 원본 데이터 파일에서 이름을 열 이름 (헤더)으로 직접 유지할 수 있습니다 .


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