ลบตำนานพิเศษใน ggplot2


93

ggplot2ฉันมีกรอบข้อมูลง่ายที่ฉันพยายามที่จะทำสายรวมกันและพล็อตจุดโดยใช้ สมมติว่าข้อมูลของฉันมีลักษณะดังนี้:

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

และฉันกำลังพยายามสร้างพล็อต:

g <- ggplot(df, aes(x=x, y=y, group=group))
g <- g + geom_line(aes(colour=group))
g <- g + geom_point(aes(colour=group, alpha = .8))
g

ผลลัพธ์ดูดีโดยมีข้อยกเว้นหนึ่งข้อ มีคำอธิบายเพิ่มเติมที่แสดงalphaสำหรับgeom_pointเลเยอร์ของฉัน

Extra Legend สำหรับความโปร่งใสของ <code> geom_point </code>

ฉันจะทำให้คำอธิบายแผนภูมิแสดงสีกลุ่มได้อย่างไร แต่ไม่ใช่สีที่แสดงการตั้งค่าอัลฟาของฉัน

คำตอบ:


178

สามารถ ตั้งค่าความสวยงามหรือจัดทำแผนที่ได้ภายในการggplotโทร

  • ความงามที่กำหนดไว้ภายในaes(...)ถูกจับคู่จากข้อมูลและสร้างตำนานขึ้นมา
  • ความงามก็อาจจะตั้งaes()ให้เป็นค่าเดียวโดยการกำหนดมันนอก

ในกรณีนี้ก็จะปรากฏขึ้นคุณต้องการชุด alpha = 0.8และแผนที่ colour = group

เพื่อทำสิ่งนี้,

วางalpha = 0.8นอกaes()นิยาม

g <- ggplot(df, aes(x = x, y = y, group = group))
g <- g + geom_line(aes(colour = group))
g <- g + geom_point(aes(colour = group), alpha = 0.8)
g

ป้อนคำอธิบายภาพที่นี่

สำหรับตัวแปรที่แมปใด ๆคุณสามารถระงับการปรากฏของคำอธิบายแผนภูมิโดยใช้guide = 'none'ในการscale_...เรียกที่เหมาะสม เช่น.

g2 <- ggplot(df, aes(x = x, y = y, group = group)) + 
        geom_line(aes(colour = group)) +
        geom_point(aes(colour = group, alpha = 0.8))
g2 + scale_alpha(guide = 'none')

ซึ่งจะส่งคืนพล็อตที่เหมือนกัน

ความคิดเห็นของEDIT @ Joran นั้นตรงประเด็นฉันได้ทำให้คำตอบของฉันครอบคลุมมากขึ้น


18
นี่คือวิธีการที่ถูกต้องตั้งแต่ OP คือการตั้งค่ามากกว่าการทำแผนที่ความงาม แต่โดยทั่วไปคุณสามารถระงับการปรากฏตัวของตำนานใด ๆ g + scale_alpha(guide = "none")ใช้สิ่งที่ต้องการ
joran

แน่นอน. คำตอบได้รับการอธิบายอย่างละเอียดแล้ว มีเหตุผลมากกว่าที่จะมีคำตอบที่ครอบคลุมไม่ใช่เฉพาะกับปัญหา OP เท่านั้น
ช่องทาง

4
ขอบคุณมากสำหรับคำอธิบายเพิ่มเติม สิ่งนี้ช่วยให้ฉันเข้าใจปรัชญาของ ggplot ได้เป็นอย่างดี
Wilduck

2
ฉันใช้ ggplot มานานกว่าหนึ่งปีแล้วและฉันไม่เคยเข้าใจความแตกต่างระหว่างตัวแปรที่แมปหรือชุด นี่เป็นคำตอบ SO ที่ดีที่สุดที่ฉันเคยเห็นขอแสดงความยินดี
Amit Kohli

1
@theforestecologist นั่นเป็นเพราะgroupสุนทรียศาสตร์ไม่ได้สร้างเกล็ดหรือคำแนะนำใด ๆ ด้วยตัวมันเอง มันมักจะดัดแปลงอย่างอื่นเสมอ คุณจะไม่ได้รับตำนานเกี่ยวกับสุนทรียศาสตร์แบบ "กลุ่ม"
joran

43

เพียงเพิ่มshow.legend = Fรหัสหลังส่วนที่คุณไม่ต้องการ

g <- ggplot(df, aes(x=x, y=y, group=group))
g <- g + geom_line(aes(colour=group))
g <- g + geom_point(aes(colour=group, alpha = .8), show.legend = F)

1
สิ่งนี้ใช้งานง่ายกว่าการทำแผนที่เทียบกับการตั้งค่าความสวยงาม (แม้ว่าจะช่วยล้างความเข้าใจผิดได้มากเช่นกัน)
Wassadamo

1

สำหรับ ggplot2 เวอร์ชันเก่า (เวอร์ชันก่อน 0.9.2 วางจำหน่ายในปลายปี 2555) คำตอบนี้ควรใช้งานได้:

ฉันลองสิ่งนี้กับ a colour_scaleและมันไม่ได้ผล ปรากฏว่ารายการทำงานเช่นฟังก์ชั่นที่มีพารามิเตอร์เริ่มต้นcolour_scale_hue TRUEฉันเพิ่มscale_colour_hue(legend=FALSE)และใช้งานได้

ฉันไม่แน่ใจว่าเป็นกรณีนี้สำหรับรายการมาตราส่วนสีทั้งหมดใน ggplot หรือไม่


3
ใช้legendในการโทรจะเลิกดีกว่าที่จะทำscale_* scale_colour_hue(guide = "none")
Gregor Thomas

3
คำนึงถึงว่าlegend=FALSEจะเลิกเป็นแหลมออกโดยความคิดเห็น @shujaa นี้เป็นคำตอบที่มีประสิทธิภาพที่ซ้ำกันคือจะเพิ่มguide = "none"ไปยังscale_fill/color*ฟังก์ชั่น
David LeBauer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.