วิธีใส่ป้ายกำกับบน geom_bar สำหรับแต่ละแถบใน R ด้วย ggplot2


105

ฉันพบสิ่งนี้วิธีใส่ป้ายกำกับบน geom_bar ใน R ด้วย ggplot2แต่เพียงแค่ใส่ป้ายกำกับ (ตัวเลข) ไว้บนแถบเดียวเท่านั้น

นี่คือสมมุติว่าแท่งสองแท่งสำหรับแต่ละแกน x จะทำสิ่งเดียวกันได้อย่างไร?

ข้อมูลและรหัสของฉันมีลักษณะดังนี้:

dat <- read.table(text = "sample Types Number
sample1 A   3641
sample2 A   3119
sample1 B   15815
sample2 B   12334
sample1 C   2706
sample2 C   3147", header=TRUE)

library(ggplot2)
bar <- ggplot(data=dat, aes(x=Types, y=Number, fill=sample)) + 
  geom_bar(position = 'dodge') + geom_text(aes(label=Number))

จากนั้นเราจะได้รับ: ป้อนคำอธิบายภาพที่นี่

ดูเหมือนว่าข้อความตัวเลขจะอยู่ในรูปแบบ "หลบ" เช่นกัน ฉันได้ค้นหาคู่มือ geom_textเพื่อค้นหาข้อมูลบางอย่าง แต่ไม่สามารถใช้งานได้

ข้อเสนอแนะ?

คำตอบ:


151

ลองสิ่งนี้:

ggplot(data=dat, aes(x=Types, y=Number, fill=sample)) + 
     geom_bar(position = 'dodge', stat='identity') +
     geom_text(aes(label=Number), position=position_dodge(width=0.9), vjust=-0.25)

ggplot เอาท์พุท


2
(+1) คุณสามารถเพิ่มvjust = -0.5หลังposition()คำสั่งเพื่อให้ค่าวางอยู่เหนือแถบ
smillig

2
ขอขอบคุณมากที่โค้ดแนะนำการตั้งค่าymaxดังนั้น aes(x=Types, y=Number, fill=sample, ymax = 16000)จะให้พื้นที่ด้านบนที่กว้างขึ้นสำหรับแกน y เพื่อให้ 15815 แสดงได้ดีขึ้น
Puriney

ฉันได้รับข้อผิดพลาดนี้: ข้อผิดพลาด: stat_count () ต้องไม่ใช้กับ ay aesthetic
userJT

3
คำตอบนี้มีไวยากรณ์ที่ใหม่กว่าstackoverflow.com/questions/33079500/…
userJT

2
@Seymourgeom_text(..., angle=-90)
rcs

4

ในการเพิ่มคำตอบของ rcs หากคุณต้องการใช้ position_dodge () กับ geom_bar () เมื่อ x เป็นวันที่ POSIX.ct คุณต้องคูณความกว้างด้วย 86400 เช่น

ggplot(data=dat, aes(x=Types, y=Number, fill=sample)) + 
 geom_bar(position = "dodge", stat = 'identity') +
 geom_text(aes(label=Number), position=position_dodge(width=0.9*86400), vjust=-0.25)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.