Jest to kontynuacja pytanie tutaj: Create non-overlapping stacked area plot with ggplot2Dodaj bezpośrednie etykiet ggplot2 wykres geom_area
Mam wykres warstwowy ggplot2 utworzony przez następujący kod. Chcę, aby etykiety od names
były wyrównane po prawej stronie wykresu. Myślę, że directlabels
może działać, ale jestem gotów spróbować wszystkiego, co jest najbardziej sprytne.
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))
Jestem nowy na directlabels
i naprawdę nie wiem, jak się etykiety, aby wyrównać do prawej strony wykresu z tych samych kolorach jak obszarach.
Dzięki za odpowiedź. Muszę wymyślić directlabele, bo nie wiem, jak można to podejście uogólnić. – Idr
@csgillespie, To było przydatne dzięki. Oto składnia, której użyłem (inny df): '' + geom_text (dane = podzbiór (df, rok == "2012"), aes (x = rok, y = cumsum (wartość), etykieta = zmienna), vjust = 6 , hjust = -.2, size = 4) '', gdzie znalazłem to skrzypce, aby poprawnie uzyskać parametry '' vjust'' i '' hjust''. Mówię to, aby podkreślić, że możesz przekazać '' cumsum'' do '' aes() '', które odkryłem metodą prób i błędów. W przypadku legendy po prawej stronie warto ustawić '' + guides (fill = guide_legend (reverse = TRUE)) '', aby uzyskać kolory w tej samej kolejności, co obraz. Czy chcesz zaktualizować przestarzałe '' opts''? – PatrickT
Aby złapać ostatni element ramki danych ('' 06-at-the-codfish-ball'' w OP i '' 2012'' w powyższym komentarzu), możesz użyć '' tail() '' funkcja z argumentem '1', np '' ogon (df2.1 $ Rok, 1) '' – PatrickT