เรียงลำดับแถบใหม่ใน geom_bar ggplot2


119

ฉันกำลังพยายามสร้างพล็อตแบบแท่งโดยที่พล็อตจะเรียงลำดับจากmiRNAสูงสุดvalueไปmiRNAหาต่ำสุด ทำไมรหัสของฉันไม่ทำงาน

> head(corr.m)

        miRNA         variable value
1    mmu-miR-532-3p      pos     7
2    mmu-miR-1983        pos    75
3    mmu-miR-301a-3p     pos    70
4    mmu-miR-96-5p       pos     5
5    mmu-miR-139-5p      pos    10
6    mmu-miR-5097        pos    47

ggplot(corr.m, aes(x=reorder(miRNA, value), y=value, fill=variable)) + 
  geom_bar(stat="identity")

คำตอบ:


217

รหัสของคุณทำงานได้ดียกเว้นว่า barplot จะเรียงลำดับจากต่ำไปสูง เมื่อคุณต้องการสั่งแท่งจากสูงไปต่ำคุณจะต้องเพิ่ม-เครื่องหมายก่อนvalue:

ggplot(corr.m, aes(x = reorder(miRNA, -value), y = value, fill = variable)) + 
  geom_bar(stat = "identity")

ซึ่งจะช่วยให้:

ใส่คำอธิบายภาพที่นี่


ข้อมูลที่ใช้:

corr.m <- structure(list(miRNA = structure(c(5L, 2L, 3L, 6L, 1L, 4L), .Label = c("mmu-miR-139-5p", "mmu-miR-1983", "mmu-miR-301a-3p", "mmu-miR-5097", "mmu-miR-532-3p", "mmu-miR-96-5p"), class = "factor"),
                         variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = "pos", class = "factor"),
                         value = c(7L, 75L, 70L, 5L, 10L, 47L)),
                    class = "data.frame", row.names = c("1", "2", "3", "4", "5", "6"))

มันไม่ได้รับคำสั่งในพล็อตของฉันด้วยเหตุผลบางประการ
user3741035

@ user3741035 แปลกดี. คุณใช้ชุดข้อมูลนี้กับชุดข้อมูลตัวอย่างที่คุณให้ไว้ด้านบนหรือทั้งชุดข้อมูลหรือไม่
Jaap

คุณใช้ R & ggplot เวอร์ชันใด คุณสามารถกำหนดชุดข้อมูลตัวอย่างที่มีขนาดใหญ่ขึ้นได้หรือไม่ (ควรมีค่ามากกว่าหนึ่งค่าvariable) หรือไม่
Jaap

6
พบวิธีแก้ปัญหา: ฉันโหลดไลบรารี (gplots) ซึ่งทำให้สิ่งต่าง ๆ ยุ่ง
user3741035

1
@maycca มันให้ผลลัพธ์ที่ถูกต้องกับฉัน (ทั้งบน OSX 10.10.4 / Windows 7, R 3.2.3 & ggplot2 2.1.0) บางทีคุณควรเริ่มด้วยเซสชั่นใหม่?
Jaap
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.