2012-07-11 11 views
7

Sto creando una serie temporale usando ggplot2 in R. Vorrei sapere come mostrare i segni di graduazione nel asse x solo per i mesi etichettati (es. Mar 07, Mar 08, ecc.) mantenendo le linee grigie verticali per ogni singolo mese.Come dire a R's ggplot2 di mettere segni di graduazione per alcuni valori dell'asse x e mantenere le linee verticali per altri valori

Il motivo principale è perché avere un segno di spunta per ogni mese rende difficile sapere quale corrisponde alle etichette.

Ecco un esempio di un complotto:

See how ticks on the x-axis make it hard to know where is each month

Ecco la linea di R dietro:

ggplot(timeseries_plot_data_mean,aes(as.numeric(project_date)))+ 
    geom_line(aes(y=num_views))+geom_point(aes(y=num_views))+ 
    stat_smooth(aes(y=num_views),method="lm")+ 
    scale_x_continuous(breaks = xscale$breaks, labels = xscale$labels)+ 
    opts(title="Monthly average num views")+xlab("months")+ylab("num views") 

Questo è ciò che vorrebbe per generare. Guarda come le zecche sono posizionate sopra l'etichetta del mese e le linee verticali sono ancora visibili ogni mese.

This is what would like to generate (Inkscape, image editor,strangely replaced the dots for q's

ho modificato manualmente la trama sopra utilizzando Inkscape, (ignorare il q, Inkscape stranamente sostituito i punti per q di)

risposta

8

Ecco una soluzione che utilizza il parametro minor_breaks di scale_x_date(). Per utilizzare questo, i valori x devono essere di classe Date anziché numeric.

library(ggplot2) 
set.seed(123) 

x <- seq(as.Date("2007/3/1"), as.Date("2012/4/1"), by = "1 month") 
y <- ((exp(-10 * seq(from=0, to=1, length.out=length(x))) * 120) + 
     runif(length(x), min=-10, max=10)) 

dat <- data.frame(Months=x, Views=y) 

x_breaks <- seq(as.Date("2007/3/1"), as.Date("2012/4/1"), by="1 year") 
x_labels <- as.character(x_breaks, format="%h-%y") 

plot_1 <- ggplot(dat, aes(x=Months, y=Views)) + 
      theme_bw() + 
      geom_line() + 
      geom_point() + 
      scale_x_date(breaks=x_breaks, labels=x_labels, minor_breaks=dat$Months) 

png("plot_1.png", width=600, height=240) 
print(plot_1) 
dev.off() 

plot_1.png

Problemi correlati