Cara meletakkan label di atas geom_bar untuk setiap batang di R dengan ggplot2

101

Saya telah menemukan ini, Cara meletakkan label di atas geom_bar di R dengan ggplot2 , tetapi itu hanya menempatkan label (angka) hanya di satu batang.

Ini, katakanlah, dua batang untuk setiap sumbu x, bagaimana melakukan hal yang sama?

Data dan kode saya terlihat seperti ini:

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))

Kemudian, kita akan mendapatkan: masukkan deskripsi gambar di sini

Tampaknya teks nomor juga diposisikan dalam pola "menghindar". Saya telah mencari manual geom_text untuk menemukan beberapa informasi, tetapi tidak dapat membuatnya berfungsi.

Saran?

Puriney
sumber

Jawaban:

143

Coba ini:

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)

keluaran ggplot

rcs
sumber
2
(+1) Anda juga dapat menambahkan vjust = -0.5setelah position()pernyataan sehingga nilainya ditempatkan tepat di atas batang.
smillig
2
Terima kasih banyak, omong-omong, kode menyarankan pengaturan ymax, jadi aes(x=Types, y=Number, fill=sample, ymax = 16000), akan menghasilkan area atas yang lebih luas untuk sumbu y, sehingga 15815 akan ditampilkan dengan lebih baik.
Puriney
Saya mendapatkan kesalahan ini: Kesalahan: stat_count () tidak boleh digunakan dengan estetika.
userJT
3
jawaban ini memiliki sintaks yang lebih baru stackoverflow.com/questions/33079500/…
userJT
2
@Seymourgeom_text(..., angle=-90)
rcs
4

Untuk menambah jawaban rcs, jika Anda ingin menggunakan position_dodge () dengan geom_bar () saat x adalah tanggal POSIX.ct, Anda harus mengalikan lebarnya dengan 86400, misalnya,

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)
matmat
sumber