2017-02-06 3 views
0

Betrachten Sie das folgende Beispiel:Mit Academic Jahre als x-Achsenbeschriftungen

library(ggplot2) 
library(dplyr) 
set.seed(30) 

data <- data.frame(group = factor(1:11), 
        year = c(rep("2013-2014", times = 11), 
          rep("2014-2015", times = 11), 
          rep("2015-2016", times = 11), 
          rep("2016-2017", times = 11)), 
        value = runif(44), 
        stringsAsFactors = FALSE) 

data$plot_year <- as.Date(paste0("01/01/", substr(data$year, start = 1, stop = 4)), 
        format = "%m/%d/%Y") 

ggplot(data, aes(x = plot_year, y = value, color = group)) + 
    geom_point() + 
    geom_line(linetype = "dotted") + 
    geom_line(data= data %>% 
        filter(as.numeric(substr(plot_year, start = 1, stop = 4)) < 2015), 
      aes(x = plot_year, y = value, color = group)) + 
    theme_bw() 

enter image description here

Wie wir oben sehen können, 2013 in der x-Achse mit 2013-2014 entspricht, 2014 mit 2014-2015 entspricht, und so weiter.

Wie kann ich diese Achsenbeschriftungen - d. H. 2013-2014, 2014-2015 usw. - anstelle der aktuellen x-Achsenbeschriftungen verwenden? Jede Lösung, die ich online gefunden habe, hat gesagt, dass sie as.Date() in irgendeiner Form verwendet, aber das sind akademische Jahre und kein festes Datum.

+2

Warum nicht einfach verwenden 'year' als x-Variable (die in Ihrem Beispiel Studienjahr ist)? – eipi10

+1

Sie können auch Ihren Datenerstellungscode verkürzen: 'year = rep (paste0 (2013: 2016," - ", 2014: 2017), jeweils = 11)'. – eipi10

+0

@ eipi10 Vielleicht verpasse ich hier etwas, aber die Verwendung von 'year' anstelle von' plot_year' für die 'ggplot'-Ästhetik lässt die' geom_line' weg. – Clarinetist

Antwort

3

Sie können das akademische Jahr direkt als x-Wert der Zeichnung verwenden. Sie können Vergleichsoperatoren (wie <=) für die Untermenge verwenden, solange ein Zeichen oder ein geordneter Faktor ist (aber nicht, wenn year ein nicht geordneter Faktor ist). Als eine Zeichenvariable wird die Reihenfolge alphabetisch sein. Ich ziehe eine geordnete Faktor, so dass ich die Reihenfolge angeben:

data$year = factor(data$year, levels=sort(unique(data$year)), ordered=TRUE) 

ggplot(data, aes(x = year, y = value, color = group, group=group)) + 
    geom_point() + 
    geom_line(linetype = "dotted") + 
    geom_line(data= data %>% filter(year <= "2014-2015")) + 
    theme_bw() 

enter image description here

Obwohl ich die Bestellung von year für subsetting bevorzugen, können Sie auch explizit die Jahre angeben, enthalten sein:

ggplot(data, aes(x = year, y = value, color = group, group=group)) + 
    geom_point() + 
    geom_line(linetype = "dotted") + 
    geom_line(data= data %>% filter(year %in% c("2013-2014","2014-2015"))) + 
    theme_bw() 
1

Sie das Datum in numerischen konvertieren und dann scale_x_continuous mit Pausen und Etiketten verwenden Parameter:

library(ggplot2) 
library(lubridate) 

# calculate the breaks as numeric corresponding to the dates 
br <- as.numeric(as.Date(c("2013-01-01", "2014-01-01", "2015-01-01", "2016-01-01"))) 
# calculate the labels at each break 
lb <- c("2013-2014", "2014-2015", "2015-2016", "2016-2017") 

ggplot(data, aes(x = as.numeric(plot_year), y = value, color = group)) + 
      geom_point() + 
      geom_line(linetype = "dotted") + 
      geom_line(data= data %>% filter(year(plot_year) < 2015), 
       aes(x = as.numeric(plot_year), y = value, color = group)) + 
      theme_bw() + 
      scale_x_continuous(breaks = br, labels = lb) + xlab("year") 

enter image description here

Verwandte Themen