Saya ingin menampilkan nilai data pada diagram batang bertumpuk di ggplot2. Ini kode percobaan saya
Year <- c(rep(c("2006-07", "2007-08", "2008-09", "2009-10"), each = 4))
Category <- c(rep(c("A", "B", "C", "D"), times = 4))
Frequency <- c(168, 259, 226, 340, 216, 431, 319, 368, 423, 645, 234, 685, 166, 467, 274, 251)
Data <- data.frame(Year, Category, Frequency)
library(ggplot2)
p <- qplot(Year, Frequency, data = Data, geom = "bar", fill = Category, theme_set(theme_bw()))
p + geom_text(aes(label = Frequency), size = 3, hjust = 0.5, vjust = 3, position = "stack")
Saya ingin menunjukkan nilai data ini di tengah setiap bagian. Bantuan apa pun dalam hal ini akan sangat dihargai. Terima kasih
Jawaban:
Dari
ggplot 2.2.0
label dapat dengan mudah ditumpuk dengan menggunakanposition = position_stack(vjust = 0.5)
ingeom_text
.Perhatikan juga bahwa "
position_stack()
danposition_fill()
sekarang menumpuk nilai dalam urutan terbalik dari pengelompokan, yang membuat urutan tumpukan default cocok dengan legenda."Jawaban valid untuk versi yang lebih lama dari
ggplot
:Berikut adalah satu pendekatan, yang menghitung titik tengah batang.
sumber
data.table
bukanplyr
, jadi sesuatu seperti ini:Data.dt[,list(Category, Frequency, pos=cumsum(Frequency)-0.5*Frequency), by=Year]
Seperti yang disebutkan hadley, ada cara yang lebih efektif untuk mengkomunikasikan pesan Anda daripada label dalam diagram batang bertumpuk. Faktanya, bagan bertumpuk tidak terlalu efektif karena batang (setiap Kategori) tidak berbagi sumbu sehingga sulit untuk membandingkan.
Hampir selalu lebih baik menggunakan dua grafik dalam contoh ini, berbagi sumbu yang sama. Dalam contoh Anda, saya berasumsi bahwa Anda ingin menunjukkan total keseluruhan dan kemudian proporsi yang dikontribusikan setiap Kategori pada tahun tertentu.
Ini akan memberi Anda tampilan 2 panel seperti ini:
Jika Anda ingin menambahkan nilai Frekuensi, tabel adalah format terbaik.
sumber