2017-02-06 2 views
0

Рассмотрим следующий пример:Использование учебных лет в качестве оси х Этикетки

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

Как видно выше, 2013 в оси х соответствует с 2013-2014, 2014 соответствует 2014-2015, и так далее.

Как использовать эти метки осей, то есть 2013-2014, 2014-2015 и т. Д. - вместо текущих меток оси X? Каждое решение, которое я нашел в Интернете, сказал, что использует as.Date() в какой-то форме или форме, но это академические годы, а не фиксированная дата.

+2

Почему бы просто не использовать 'year' (что учебный год в вашем примере) в качестве переменной х? – eipi10

+1

Кроме того, вы можете сократить код создания данных: 'year = rep (paste0 (2013: 2016,« - », 2014: 2017), each = 11)'. – eipi10

+0

@ eipi10 Может быть, я что-то пропустил здесь, но используя 'year' вместо' plot_year' для эстетики 'ggplot', опускает' geom_line'. – Clarinetist

ответ

3

Вы можете использовать учебный год непосредственно как x-значение сюжета. Вы можете использовать операторы сравнения (например, <=) для подмножества, если year является символом или упорядоченным множителем (но не если year является неупорядоченным фактором). В качестве символьной переменной упорядочение будет буквенным. Я предпочитаю упорядоченный фактор, так что я могу указать порядок:

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

Хотя я предпочитаю использовать упорядоченность year для подмножества, вы можете явно указать годы, которые будут включены:

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

Вы можете преобразовать дату в числовой, а затем использовать scale_x_continuous с перерывами и этикетки параметр:

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

Смежные вопросы