2014-11-25 13 views
29
Rdates <- c("2007-01-31","2007-02-28","2007-03-30","2007-04-30","2007-05-31","2007-06-29","2007-07-31","2007-08-31","2007-09-28","2007-10-31") 
Rdates <- as.Date(Rdates) 
Cnames <- c("Column 1 Really Long","Column 2 Really Long","Column 3 Really Long","Column 4 Really Long","Column 5 Really Long","Column 6 Really Long","Column 7 Really Long","Column 8 Really Long","Column 9 Really Long","Column 10 Really Long") 
MAINDF <- data.frame(replicate(10,runif(10,-0.03,0.03))) 
rownames(MAINDF) <- Rdates 
colnames(MAINDF) <- Cnames 
CUSTOMpalette <- c("#1a2ffa", "#0d177d", "#1a9ffa", "#fa751a", "#4b8e12", "#6fd21b", "#fae51a", "#c3b104", "#f5df05", "#dcc805") 
MAINDF[,"dates"] <- Rdates 

MAINDF <- melt(MAINDF,id.vars="dates") 

gg <- ggplot(MAINDF, aes(x = dates, y = value, fill = variable)) 
gg <- gg + geom_bar(stat = "identity") 
gg <- gg + scale_x_date(breaks = "3 months", labels=date_format("%b%y"),limits=c(min(as.Date(MAINDF$dates)),max(as.Date(MAINDF$dates)))) 
gg <- gg + theme(
    axis.text.x= element_text(color="black",angle=45, size=10, vjust=0.5), 
    axis.text.y= element_text(color="black", size=12, vjust=0.5), 
    axis.title.y = element_text(color="black",size=12, vjust=0.5), 
    plot.title = element_text(color="black",face="bold",size=14, hjust=0.5,vjust=1), 
    panel.background = element_blank(), 
    panel.border = element_rect(linetype = "solid", colour = "black",fill=NA), 
    legend.position="bottom", 
    legend.title = element_blank(), 
    legend.key = element_rect(fill="white"), legend.background = element_rect(fill=NA) 
) 
gg <- gg + xlab("") + ylab("Monthly Returns") 
gg <- gg + ggtitle("Contribution by Strategy") 
gg <- gg + scale_y_continuous(labels = percent_format()) 
gg <- gg + scale_fill_manual(values=CUSTOMpalette) 
gg 

Attualmente sono disponibili le impostazioni del grafico a barre in pila ggplot2. Tutto funziona correttamente ora tranne che ho un problema con la legenda. L'ho messo sul fondo ma ci sono 10 elementi quindi alcuni sono tagliati (non si adattano). .? Ho provato guides(fill=guide_legend(nrow=2)) ma questo mette le etichette in un ordine diverso (voglio ottenere il primo 5 attraverso poi l'ultimo 5 sotto Eventuali suggerimentiLegenda in basso, due righe racchiuse in ggplot2 in r

+0

si può fare il vostro esempio riproducibile, per favore? – joran

+0

si prega di leggere le informazioni su come produrre un [esempio riproducibile minimo] (http://stackoverflow.com/questions/5963269/how-to-make- a-great-r-reproducible-example/5963610 # 5963610). Ciò renderà molto più semplice l'aiuto degli altri. – Jaap

+0

Will, pensò che potesse essere solo una semplice domanda e mi mancava qualcosa. Ill lavoro su un esempio riproducibile. –

risposta

58

Si erano davvero vicino Provate questo proprio alla fine:.

gg+guides(fill=guide_legend(nrow=2,byrow=TRUE)) 

+2

Ah wow non posso credere che non l'ho trovato. Grazie per la risposta, sbattevo la testa contro la scrivania. –

Problemi correlati