ตำแหน่ง geom_text บนบาร์พล็อตที่หลบ


99

ฉันพยายามทำให้ชื่ออธิบายตัวเอง แต่นี่ไป - ข้อมูลก่อน:

dtf <- structure(list(variable = structure(c(1L, 1L, 2L, 2L, 3L, 3L, 
4L, 4L, 5L, 5L), .Label = c("vma", "vla", "ia", "fma", "fla"), class = "factor"), 
    ustanova = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
    2L), .Label = c("srednja škola", "fakultet"), class = "factor"), 
    `(all)` = c(42.9542857142857, 38.7803203661327, 37.8996138996139, 
    33.7672811059908, 29.591439688716, 26.1890660592255, 27.9557692307692, 
    23.9426605504587, 33.2200772200772, 26.9493087557604)), .Names = c("variable", 
"ustanova", "(all)"), row.names = c(NA, 10L), class = c("cast_df", 
"data.frame"), idvars = c("variable", "ustanova"), rdimnames = list(
    structure(list(variable = structure(c(1L, 1L, 2L, 2L, 3L, 
    3L, 4L, 4L, 5L, 5L), .Label = c("vma", "vla", "ia", "fma", 
    "fla"), class = "factor"), ustanova = structure(c(1L, 2L, 
    1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L), .Label = c("srednja škola", 
    "fakultet"), class = "factor")), .Names = c("variable", "ustanova"
    ), row.names = c("vma_srednja škola", "vma_fakultet", "vla_srednja škola", 
    "vla_fakultet", "ia_srednja škola", "ia_fakultet", "fma_srednja škola", 
    "fma_fakultet", "fla_srednja škola", "fla_fakultet"), class = "data.frame"), 
    structure(list(value = structure(1L, .Label = "(all)", class = "factor")), .Names = "value", row.names = "(all)", class = "data.frame")))

และฉันต้องการสร้างบาร์พล็อตแบบหลบ ๆ ทำcoord_flipและใส่ป้ายข้อความบางส่วนในแถบ:

ggplot(bar) + geom_bar(aes(variable, `(all)`, fill = ustanova), position = "dodge") +
 geom_text(aes(variable, `(all)`, label = sprintf("%2.1f", `(all)`)), position = "dodge") +
 coord_flip()

คุณสามารถเห็นผลลัพธ์ที่นี่

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

ฉันคิดว่าฉันกำลังขอบางสิ่งบางอย่างที่ไม่สำคัญ ฉันต้องการให้ป้ายข้อความ "ติดตาม" แถบแบบเรียงซ้อนกัน ป้ายถูกวางอย่างถูกต้องบนแกน y แต่จะวางตำแหน่งบนแกน x ได้อย่างไร?


ใช่ ... ฉันควรจะโพสต์ข้อความนี้ในรายชื่ออีเมลของ ggplot2 ฉันไม่ต้องการโพสต์ข้ามไปดังนั้นฉันจะสวมหมวกอดทนรอให้ @hadley คิดอะไรสักอย่าง! =)
aL3xa

ฉันผิดไป. และฉันต้องทำความคุ้นเคยกับแพ็คเกจ ggplot ให้มากขึ้น
Joris Meys

คำตอบ:


157

นี่คือสิ่งที่คุณต้องการหรือไม่?

ggplot(bar) + 
  geom_bar(aes(variable, `(all)`, fill = ustanova), position = "dodge") +
  geom_text(aes(variable, `(all)`, label = sprintf("%2.1f", `(all)`)), 
            position = position_dodge(width = 1)) + 
  coord_flip()

คีย์ใช้position = position_dodge(width = 1)แทนposition = "dodge"ซึ่งเป็นเพียงทางลัดที่ไม่มีพารามิเตอร์ใด ๆ

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


ในggplot2_2.0.0คุณจะพบหลายตัวอย่าง?geom_textเกี่ยวกับวิธีการวางตำแหน่งgeom_textบนแท่งที่หลบหรือซ้อนกัน (ส่วนรหัสที่ชื่อว่า " # Aligning labels and bars") คำถามและคำตอบอาร์กิวเมนต์ width ใน position_dodge คืออะไรให้คำอธิบายที่ละเอียดยิ่งขึ้นของหัวข้อ


1
สิ่งที่ฉันต้องการ! ฉันเป็นหนี้คุณเบียร์สำหรับอันนี้! =)
aL3xa

2
ไม่มีวิธีใดที่จะทำให้สิ่งนี้เป็นไปโดยอัตโนมัติ? ต้องระบุความกว้างเสมอ?
vashts85

12
สิ่งนี้ใช้ได้ผลสำหรับฉันหลังจากที่ฉันเพิ่มfill = ustanovaในgeom_textเลเยอร์ซึ่งเหมาะสมโดยเฉพาะอย่างยิ่งเมื่อคุณมีแถบแนวนอนจำนวนมาก (อาจจำเป็นสำหรับ 3+ บาร์ต่อ x) และจำนวนการแบ่งจะต้องเท่ากันสำหรับข้อความเช่นเดียวกับแถบ .
Alan

3
สำหรับแง่มุมและหลบหลีกนี่คือคำตอบที่มีประโยชน์: stackoverflow.com/a/26661791/1000343
Tyler Rinker

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