ลบคำอธิบายแผนภูมิ 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

สำเนาที่เป็นไปได้ของการปิดตำนานใน ggplot
Umaomamaomao

คำตอบ:


445

จากตำราอาหารที่ bp เป็น ggplot ของคุณ:

ลบคำอธิบายแผนภูมิสำหรับสุนทรียศาสตร์เฉพาะ (เติม):

bp + guides(fill=FALSE)

มันสามารถทำได้เมื่อระบุสเกล:

bp + scale_fill_discrete(guide=FALSE)

สิ่งนี้จะลบตำนานทั้งหมด:

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

25
ในฐานะที่เป็นการตอบกลับความคิดเห็นโดย @ Alex A: โปรดทราบว่า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

เนื่องจากคำถามและคำตอบของผู้ใช้340026เป็นคำค้นหายอดนิยมฉันได้ทำตัวอย่างที่ทำซ้ำได้และภาพประกอบสั้น ๆ ของคำแนะนำที่ได้ทำไปพร้อมกับโซลูชันที่ตอบคำถามของ 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() 

ลบการเติมเพื่อให้ linetype มองเห็นได้

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
เพิ่งสังเกตเห็นสีเติมสีน้ำเงินในพล็อตสุดท้ายไม่ปรากฏบนกราฟไม่แน่ใจว่าทำไม ...
PatrickT

พิมพ์warnings()หลังจากที่คุณเรียกใช้รหัสของคุณและคุณจะเห็นเหตุผลสำหรับริบบิ้นสีฟ้าที่ไม่ปรากฏขึ้น
markus

@markus: เข้าใจแล้ว! ฉันจะไม่รำคาญที่จะแก้ไขตัวอย่างเนื่องจากปัญหาแยกจากกัน อย่างไรก็ตามมันมีเหตุผลเล็กน้อยที่จะมีตำนานseเมื่อไม่ได้คำนวณ น่าจะเป็นปัญหาที่ github แต่ฉันไม่ได้มีพลังงานในขณะนี้ ...
23432

13

หากแผนภูมิของคุณใช้ทั้งfillและcolorความสวยงามคุณสามารถลบคำอธิบายแผนภูมิได้ด้วย:

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