2012-05-01 10 views
5

ggplot2 doğrudan etiket ekleyin: Create non-overlapping stacked area plot with ggplot2Bu burada söz bir devamıdır geom_area grafiği

Aşağıdaki kod tarafından oluşturulan bir ggplot2 alan grafik var. Grafiğin sağ tarafında names etiketlerinin hizalanmasını istiyorum. Bence directlabels işe yarayabilir, ancak en akıllı olanı denemek için istekliyim.

enter image description here

require(ggplot2) 
require(plyr) 
require(RColorBrewer) 
require(RCurl) 
require(directlabels) 

link <- getURL("http://dl.dropbox.com/u/25609375/so_data/final.txt") 
dat <- read.csv(textConnection(link), sep=' ', header=FALSE, 
     col.names=c('count', 'name', 'episode')) 


dat <- ddply(dat, .(episode), transform, percent = count/sum(count)) 

# needed to make geom_area not freak out because of missing value 
dat2 <- rbind(dat, data.frame(count = 0, name = 'lane', 
          episode = '02-tea-leaves', percent = 0)) 

g <- ggplot(arrange(dat2,name,episode), aes(x=episode,y=percent)) + 
    geom_area(aes(fill=name, group = name), position='stack') + scale_fill_brewer() 

g1 <- g + geom_dl(method='last.points', aes(label=name)) 

Ben directlabels yeni ve etiketler alanlar ile aynı renkleri ile grafiğin sağ tarafına hizalamak nasıl gerçekten emin marka değilim. etiket eklemek için geom_text

cevap

5

Basit kullanabilirsiniz.

dd = dd[with(dd, order(name, levels(dd$name))),] 

Sonra planlamaktan kümülatif yüzde çalışmak:

dd=subset(dat, episode=="06-at-the-codfish-ball") 

Ardından faktör düzeyine göre veri çerçevesini sipariş

:

dd$cum = cumsum(dd$percent) 
Birincisi, size nihai x değeri elde etmek veri kümesini alt küme

Sonra sadece bir standart geom_text kullanın:

g + geom_text(data=dd, aes(x=6, y=cum, label=name)) 

Oh, ve komplo üzerine önlemek için açısına x ekseni etiketleri isteyebilirsiniz:

g + opts(axis.text.x=theme_text(angle=-25, hjust=0.5, size = 8)) 

Grafik cevap

enter image description here

+0

teşekkürler. Yönergeleri anlamaya ihtiyacım var, çünkü bu yaklaşımın genel olarak nasıl ayrılabileceğini bilmiyorum. – Idr

+0

@csgillespie, Bu yararlı oldu teşekkürler. Burada kullandığım sözdizimi (başka bir df): '' + geom_text (data = alt kümesi (df, Yıl == "2012"), aes (x = Yıl, y = cumsum (değer), etiket = değişken), vjust = 6 , hjust = -.2, size = 4), '' vjust'' ve '' hjust'' parametrelerini doğru elde edebilmek için fiddly buldum. Denemek istediğim, "cumsum" 'u, deneme yanılma yöntemiyle keşfettiğim "aes()" e iletebilirsiniz. Sağdaki açıklama için, renkleri görüntüyle aynı sırayla almak için '' + kılavuzları (fill = guide_legend (reverse = TRUE)) '' ayarlamak faydalı olur. Kullanımdan kaldırılan "opts" işlevini güncellemek istiyor musunuz? – PatrickT

+0

Ve dataframe son elemanını yakalamak için ('' 06-vasıl morina-ball'' OP ve 'yukarıda benim yorumunda' 2012''), siz ('' kuyruk kullanabilirsiniz) '' '1' argümanı ile fonksiyon, örn. kuyruk (df2.1 $ Yıl, 1) '' – PatrickT

İlgili konular