R Возраст графика (в годах и месяцах) по оси X в ggplot2 - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь создать график в ggplot2 с возрастом в годах и месяцах на оси X.Переменная возраста должна выглядеть следующим образом: «2; 6» = 2 года и 6 месяцев, «5; 9» = 5 лет и 9 месяцев.Необработанные данные для оси x состоят из возраста в месяцах, и для создания переменной «возраст в годах и месяцах» требуется функция.Я посмотрел в Интернете, и хотя я могу найти много материала о графике дат (например, с помощью пакета «lubridate»), я не могу понять, как адаптировать эти процедуры к графику возраста.Идеальным решением было бы перемаркировать ось х с помощью пользовательской функции.Ниже приведен минимальный проработанный пример.Я создал небольшой набор данных, функцию, чтобы превратить месяцы в год-в-месяцы, и я начал заговор.Может ли кто-нибудь помочь мне с синтаксисом для перемаркировки осей X (я думаю, что «scale-x-discrete» может быть правильной функцией).Спасибо!

library(ggplot2)

# Create data frame
df <- cbind.data.frame(c(22.2, 24.3, 26.1, 39.8, 55.0), c(0.5, 0.6, 0.8, 1, 1.5))
names(df) <- c("age_months", "height")

# Create function for turning age-in-months into age-in-years+months
m2ym <- function(age_m){
  year <- floor(age_m/12)
  month <- floor(age_m - (year*12))
  return(paste0(year, ";", month))
}

#Now plot
g <- ggplot(df, aes(age_months, height))
g <- g + geom_point()
# Now add g <- g + scale_x_discrete()???

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Я не уверен, что полностью понимаю вопрос и не могу комментировать, но из того, что я понимаю, если вы хотите построить свою ось x вместо результатов функции, почему бы не изменить новый столбец с помощью вашей функции, т.е.,

library(dplyr)
df <- df %>% mutate(age_y_m = m2ym(age_months))

затем строим новый столбец и перемаркируем ось x

g <- ggplot(df, aes(x = age_y_m, y = height)) +
         geom_point() + 
         xlab("Age in Years and Months (y;m)")
0 голосов
/ 14 февраля 2019

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

my_breaks = 6*0:10  # every six months, from 0 to 60 months
my_breaks_labels = m2ym(my_breaks)  # save those numbers as "yr + mo" format
g + scale_x_continuous(breaks = my_breaks,         # use these breaks...
                       labels = my_breaks_labels)  # ...with these labels

enter image description here

...