วิธีการเปลี่ยนชื่อตำนานใน 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")ควรทำอย่างไร
baptiste

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.0ฉันใช้p$labels$colour <- "New legend title"
ClementWalter

4
p$labels$fill ดี แต่ถ้าคุณใช้ตัวแปรมากกว่าหนึ่งตัวในสุนทรียศาสตร์ (linetype, color, shape) ใน aes คุณจะต้องเปลี่ยนมันแยกกัน
ลูกโซ่

226

ฉันไม่ได้ขุดในเรื่องนี้มาก แต่เพราะคุณใช้fill = cond เป็น ggplot ()

 + labs(color='NEW LEGEND TITLE') 

อาจจะไม่ได้ทำงาน อย่างไรก็ตามคุณเปลี่ยนสีด้วยการเติมมันใช้งานได้!

+ labs(fill='NEW LEGEND TITLE') 

สิ่งนี้ใช้ได้กับฉันใน ggplot2_2.1.0


20
ฉันคิดว่านี่เป็นคำตอบที่ตรงไปตรงมาที่สุดมันทำในสิ่งที่ OP ขอให้มีหนึ่งบรรทัดมากที่สุด
Leo

3
ทั้ง color = และ fill = ควรทำงาน นี่คือคำตอบที่ "ถูกต้อง" สำหรับคำถาม IMO
Dan

3
สีของการเติมจะทำงานได้หรือไม่ขึ้นอยู่กับสิ่งที่ "cond" (หรือกลุ่มในกรณีอื่น ๆ ) ถูกแมปกับ คำอธิบายที่ดีสามารถพบได้ในcookbook-r.com/Graphs/Legends_(ggplot2)
1442363

3
นี่คือคำตอบที่ดีที่สุด
Akshay Gaur

1
หมายเหตุ: ใน ggplot2 3.0+ วิธีนี้ไม่ได้ผล: แก้ไขได้โดยp + guides(fill=guide_legend(title="New Legend Title"))
Sumanth Lazarus

39

เนื่องจากคุณมีสอง densitys 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แทนที่จะต้องการcolor(หรือcolour) เมื่อให้เวลาของคำถามอาจเป็นไปได้ว่าเป็นggplot2รุ่นที่เกี่ยวข้อง
สตีฟ

1
@ ความแตกต่างที่สำคัญคือว่าอันนี้ใช้งานได้จริง
Luís de Sousa

16

เนื่องจากในรหัสของคุณที่คุณใช้ggplot(data, fill= cond)ในการสร้างกราฟที่คุณจำเป็นต้องเพิ่มชื่อตำนานโดยยังมีการใช้ "เติม" +labs(fill="Title name")ในส่วนเช่นฉลาก หากคุณกำลังใช้ชนิดที่แตกต่างกันของพล็อตที่เป็นรหัส ggplot (ข้อมูล color = 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

เพียงเพิ่มในรายการ (ตัวเลือกอื่น ๆ ที่นี่ไม่ทำงานสำหรับฉัน) คุณยังสามารถใช้ฟังก์ชั่น update_labels สำหรับ 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")

สิ่งนี้จะช่วยให้คุณสามารถเปลี่ยนป้าย x และแกน y ด้วยเส้นแยก:

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

2

ฉันสังเกตว่ามีสองวิธีในการเปลี่ยน / ระบุ legend.title สำหรับ 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)

รหัสมีการแก้ไขขึ้นอยู่กับตัวอย่างจาก GitHub


1

ฉันกำลังใช้ facet_wrap ใน ggplot ของฉันและไม่มีวิธีแก้ไขปัญหาที่แนะนำให้ฉันยกเว้นโซลูชันของ ArnaudA:

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

1

หลายคนใช้เป็นจำนวนมากเวลาเปลี่ยนป้าย, " "ป้ายตำนานชื่อเรื่องและชื่อของแกนเพราะพวกเขาไม่ทราบว่ามันเป็นไปได้ที่ตารางภาระในการวิจัยที่มีช่องว่าง อย่างไรก็ตามคุณสามารถทำเช่นนี้เพื่อประหยัดเวลาหรือลดขนาดของรหัสของคุณโดยการระบุตัวคั่นเมื่อคุณโหลดตารางที่ตัวอย่างเช่นคั่นด้วยแท็บ (หรือตัวคั่นอื่น ๆ กว่าค่าเริ่มต้นหรือพื้นที่เดียว):

read.table(sep = '\t')

หรือโดยใช้พารามิเตอร์การโหลดเริ่มต้นของรูปแบบ csv:

read.csv()

ซึ่งหมายความว่าคุณสามารถเก็บชื่อ"NEW LEGEND TITLE"ไว้เป็นชื่อคอลัมน์ (ส่วนหัว) ในไฟล์ข้อมูลดั้งเดิมของคุณเพื่อหลีกเลี่ยงการระบุชื่อคำอธิบายใหม่ในทุกพล็อต


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.