2015-06-05 19 views
5

Ggplot2'de yığılmış çubuğun üstündeki her bir sınıfın toplam değerini (benim durumumda: a = 450, b = 150, c = 290, d = 90) nasıl çizebilirim? ? ggplot2 içindeki yığılmış çubuğun üstündeki toplam değeri çizin

library(dplyr) 
totals <- hp %>% 
    group_by(class) %>% 
    summarize(total = sum(value)) 

Sonra geom_text ekleyerek:

#Data 
hp=read.csv(textConnection(
"class,year,amount 
a,99,100 
a,100,200 
a,101,150 
b,100,50 
b,101,100 
c,102,70 
c,102,80 
c,103,90 
c,104,50 
d,102,90")) 
hp$year=as.factor(hp$year) 

#Plotting 
p=ggplot(data=hp) 
p+geom_bar(binwidth=0.5,stat="identity")+ 
aes(x=reorder(class,-value,sum),y=value,label=value,fill=year)+ 
theme() 
+0

Sen 'bir sütun var veride miktar ama estetikte “değer”; Bunlar aynı olmamalı mı? –

+0

Gerçekten. Örneği düzeltmek için düzenlemeyi denedim, ancak düzenleme reddedildi ... 'aes' çağrısı şöyle olmalıdır: aes (x = yeniden sıralama (sınıf, -amount, toplam), y = miktar, etiket = miktar, dolgu = yıl) + ' –

cevap

10

Sen başına sınıfının toplamları bir veri kümesi (bu birden fazla yol yapılabilir ama dplyr tercih) oluşturarak bunu yapabilirsiniz: İşte benim kodudur

Veri seti olarak totals kullanarak çiziminizi katmana ekleyin
p + geom_bar(binwidth = 0.5, stat="identity") + 
    aes(x = reorder(class, -value, sum), y = value, label = value, fill = year) + 
    theme() + 
    geom_text(aes(class, total, label = total, fill = NULL), data = totals) 
Sen vjust argümanı kullanarak çubukların üstüne daha yüksek veya daha düşük metin yapabilir

, ya da sadece total bazı değer ekleyerek:

p + geom_bar(binwidth = 0.5, stat = "identity") + 
    aes(x = reorder(class, -value, sum), y = value, label = value, fill = year) + 
    theme() + 
    geom_text(aes(class, total + 20, label = total, fill = NULL), data = totals) 

enter image description here

+0

Her yıl barlarda nasıl değer katabiliriz? –