Questa è una continuazione della domanda qui: Create non-overlapping stacked area plot with ggplot2Aggiungere etichette diretti al ggplot2 grafico geom_area
Ho un grafico ad area ggplot2 creato da seguente codice. Voglio che le etichette da names
siano allineate sul lato destro del grafico. Penso che lo directlabels
possa funzionare, ma sono disposto a provare qualsiasi cosa sia più intelligente.
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))
Sono nuovo di directlabels
e non realmente sicuro di come ottenere le etichette di adeguamento alla parte destra del grafico con gli stessi colori come le zone del marchio.
Grazie per la risposta. Ho bisogno di capire i directlabels, perché non so quanto questo approccio sia generalizzabile. – Idr
@csgillespie, questo è stato utile grazie. Qui la sintassi che ho usato (un altro df): '' + geom_text (data = sottoinsieme (df, Anno == "2012"), aes (x = Anno, y = cumsum (valore), etichetta = variabile), vjust = 6 , hjust = -.2, size = 4) '', dove ho trovato faticoso ottenere i parametri '' vjust'' e '' hjust'' correttamente. Lo sto dicendo per sottolineare che puoi passare '' cumsum'' a '' aes() '', che ho scoperto per tentativi ed errori. Per la legenda a destra, è utile impostare '' + guide (fill = guide_legend (reverse = TRUE)) '' per ottenere i colori nello stesso ordine dell'immagine. Vuoi aggiornare il deprecato '' opts''? – PatrickT
E per catturare l'ultimo elemento del dataframe ('' 06-at-the-codfish-ball'' nell'OP e '' 2012'' nel mio commento sopra), puoi usare '' tail() '' funzione con argomento '1', ad es '' tail (df2.1 $ Year, 1) '' – PatrickT