2014-12-09 18 views
9

Angenommen, ich habe einen Plan wie folgt aus:ersten Monat mit Jahr in ggplot2

DF <- data.frame(date=Sys.Date() - (-100):100, y=rnorm(201)) 
library("ggplot2") 
library(scales) 
ggplot(DF, aes(x=date, y=y)) + 
geom_point() + 
scale_x_date(breaks = "1 month", minor_breaks = "1 week", labels=date_format("%b")) 

Hier möchte ich in jeder Woche großen Linien und Etiketten an jeden Monat und kleinere Linien aufzunehmen. Das funktioniert gut, aber jetzt möchte ich das Jahr hinter dem abgekürzten Monat einbeziehen, aber nur für den ersten Monat des Jahres in der Handlung. So sollten die Etiketten sep 2014 lesen. Oktober, November, Dezember, Januar 2015, Februar, März ....

Ist das möglich?

Antwort

12

Sie können es mit einem benutzerdefinierten Datumsformatierer duplizierten Jahre zu entfernen:

my_date_format <- function() 
{ 
    function(x) 
    { 
     m <- format(x,"%b") 
     y <- format(x,"%Y") 
     ifelse(duplicated(y),m,paste(m,y)) 
    } 
} 

ggplot(DF, aes(x=date, y=y)) + 
geom_point() + 
scale_x_date(breaks = "1 month", minor_breaks = "1 week", labels=my_date_format()) 

Custom date plot

+1

Nice one! Wenn Sie die Funktion so ändern, dass "ifelse (dupliziert (y), m, einfügen (m, y))" zurückgegeben wird, vermeiden Sie das zusätzliche Leerzeichen am Ende der Monatsnamen (wodurch sie nicht genau unter dem Tick zentriert sind) Marken). – konvas

+0

@konvas Guter Punkt. – James

+0

Super! Vielen Dank! –

Verwandte Themen