Cách thay đổi tiêu đề huyền thoại trong ggplot


299

Tôi có cốt truyện như sau. Nó được tạo bằng lệnh này:

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")

Bây giờ điều tiếp theo tôi muốn làm là sửa đổi tiêu đề huyền thoại từ cond thành TITLE LEGEND MỚI .

Vì vậy, những gì tôi đã làm là chỉ cần thêm dòng sau đây thêm phần cuối của đoạn mã trên:

+labs(colour="NEW LEGEND TITLE")

Nhưng nó không hoạt động. Cách đúng đắn để làm điều đó là gì?

nhập mô tả hình ảnh ở đây


110
labs(fill="xyz")nên làm
baptiste

1
@baptiste Tôi đã quay lại câu hỏi này nhiều lần mà không nhận thấy bình luận của bạn, bạn có thể viết nó lên như một câu trả lời không? IMO đó là giải pháp đơn giản nhất và xứng đáng được công nhận
User632716

3
@ User632716 đã có trong câu trả lời của ai đó bên dưới
baptiste

7
nó không hoạt động ...
shenglih

1
Đối với những người đang tìm kiếm một câu trả lời liên quan đến các lô có nhiều geom_câu, tôi khuyên bạn nên trả lời tại stackoverflow.com/a/38485985/1169233 , đây là câu duy nhất phù hợp với tôi.
Waldir Leoncio

Câu trả lời:


347

Điều này sẽ làm việc:

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"))

(Hay cách khác)

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

10
Một cách khác làp$labels$fill <- "New Legend Title"
Alex Holcombe

3
sự khác biệt giữa hướng dẫn và scale_fill_disc rời
Medhat

18
p$labels$fillkhông làm việc cho tôi. Với ggplot2_2.1.0tôi sử dụngp$labels$colour <- "New legend title"
ClementWalter

4
p$labels$fill là tốt nhưng nếu bạn đang sử dụng nhiều hơn một biến trong thẩm mỹ (linetype, màu sắc, hình dạng) trong aes, bạn phải thay đổi chúng cho từng biến riêng biệt.
discipulus

226

Tôi không đào sâu vào vấn đề này nhưng vì bạn đã sử dụng fill = cond trong ggplot (),

 + labs(color='NEW LEGEND TITLE') 

có thể không làm việc Tuy nhiên, bạn thay thế màu bằng cách điền , nó hoạt động!

+ labs(fill='NEW LEGEND TITLE') 

Điều này làm việc cho tôi trong ggplot2_2.1.0


20
Tôi nghĩ rằng đây là câu trả lời rõ ràng nhất, nó thực hiện chính xác những gì OP yêu cầu với một dòng bổ sung nhiều nhất
Leo

3
cả màu = và tô = nên hoạt động. Đây là câu trả lời "đúng" cho câu hỏi, IMO
Dan

3
màu của màu có hoạt động hay không phụ thuộc vào "cond" (hoặc nhóm trong các trường hợp khác) thực sự được ánh xạ tới. Một lời giải thích tốt có thể được tìm thấy trong cookbook-r.com/Graphs/Legends_(ggplot2)
user1442363

3
Đây là câu trả lời tốt nhất.
Bò tót Akshay

1
Lưu ý: trong ggplot2 3.0+, giải pháp này không hoạt động: đã giải quyết nó bằng cáchp + guides(fill=guide_legend(title="New Legend Title"))
Sumanth Lazarus

39

Vì bạn có hai mật độ, tôi tưởng tượng bạn có thể muốn thiết lập màu sắc của riêng mình scale_fill_manual.

Nếu vậy bạn có thể làm:

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"))

nhập mô tả hình ảnh ở đây


27

Không có mã nào ở trên làm việc cho tôi.

Đây là những gì tôi tìm thấy và nó hoạt động.

labs(color = "sale year")

Bạn cũng có thể cung cấp một khoảng trắng giữa tiêu đề và màn hình bằng cách thêm \nvào cuối.

labs(color = 'sale year\n")


2
Làm thế nào là khác bất kỳ câu trả lời này ?
merv

3
Đúng, tôi đã thử mọi ví dụ ở trên và đây là ví dụ duy nhất phù hợp với tôi. Cảm ơn!
SummerEla

Làm thế nào công việc này sẽ đưa ra câu hỏi bài gốc, có vẻ như fillthay vì color(hoặc colour) là cần thiết? Cho thời gian của câu hỏi, có thể nó là ggplot2phiên bản liên quan.
steveb

1
@merv Sự khác biệt chính là cái này thực sự hoạt động.
Luís de Sousa

16

Vì trong mã của bạn, bạn đã sử dụng ggplot(data, fill= cond)để tạo biểu đồ, bạn cần thêm tiêu đề chú thích bằng cách sử dụng "điền" vào phần nhãn tức là +labs(fill="Title name"). Nếu bạn đang sử dụng một loại cốt truyện khác trong đó mã là ggplot (data, color = cond), thì bạn có thể sử dụng +labs(colour= "Title Name"). Tóm lại, đối số phòng thí nghiệm phải phù hợp với đối số aes.

Tôi đã sử dụng + guides(fill=guide_legend("my awesome title"))để thay đổi tiêu đề huyền thoại trên các lô geom_bar nhưng dường như nó không hoạt động cho geom_point.


..., nhưng đối với geom_point(), điều này làm việc cho tôi:guides(color=guide_legend("Type:"))
knb

1
@knb, phương pháp của bạn hoạt động:guides(color=guide_legend("Score Ranking:"))
bmc

1
Làm thế nào là khác nhau mà câu trả lời này ?
merv

6

Có một câu trả lời rất đơn giản khác có thể làm việc cho một số biểu đồ đơn giản.

Chỉ cần thêm một cuộc gọi đến guide_legend () vào biểu đồ của bạn.

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

Như thể hiện trong các tài liệu ggplot rất đẹp .

Nếu điều đó không hiệu quả, bạn có thể đặt chính xác hơn các tham số hướng dẫn của mình bằng một cuộc gọi đến hướng dẫn :

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

Bạn cũng có thể thay đổi hình dạng / màu sắc / kích thước bằng cách chỉ định các tham số này cho cuộc gọi của bạn guides.


26
Điều này không làm việc cho tôi, nhưng qplot(…) + guides(color=guide_legend(title="sale year"))đã làm việc
Arnaud A

3

Chỉ cần thêm vào danh sách (các tùy chọn khác ở đây không phù hợp với tôi), bạn cũng có thể sử dụng chức năng update_labels cho ggplot:

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")

Điều này cũng sẽ cho phép bạn thay đổi nhãn trục x và y, với các dòng riêng biệt:

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

2

Tôi nhận thấy có hai cách để thay đổi / chỉ định Legend.title cho ggboxplot ():

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)

Mã được sửa đổi dựa trên ví dụ từ GitHub .


1

Tôi đang sử dụng facet_wrap trong ggplot của mình và không có giải pháp được đề xuất nào phù hợp với tôi ngoại trừ giải pháp của ArnaudA:

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

1

Nhiều người dành nhiều thời gian để thay đổi nhãn, nhãn huyền thoại, tiêu đề và tên của trục vì họ không biết có thể tải các bảng trong R có chứa khoảng trắng " ". Tuy nhiên, bạn có thể làm điều này để tiết kiệm thời gian hoặc giảm kích thước mã của mình, bằng cách chỉ định các dấu phân cách khi bạn tải một bảng được phân tách bằng các tab (hoặc bất kỳ dấu tách nào khác ngoài mặc định hoặc một khoảng trắng):

read.table(sep = '\t')

hoặc bằng cách sử dụng các tham số tải mặc định của định dạng csv:

read.csv()

Điều này có nghĩa là bạn có thể trực tiếp giữ tên "NEW LEGEND TITLE"dưới dạng tên cột (tiêu đề) trong tệp dữ liệu gốc của mình để tránh chỉ định tiêu đề chú giải mới trong mỗi âm mưu.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.