ggplot: проблема при преобразовании значений оси из количества дней в месяцы в коробчатой ​​диаграмме

При преобразовании числовой переменной «количество дней с 1 января 2015 года» в дату на диаграмме отображается только часть диапазона значений y, но не все.

В этом примере я построил график «пол» и «месяцы». Месяцы были получены путем преобразования исходной переменной "days" (т.е. дни, начиная с 2015/1/1). Диапазон числовых значений должен простираться с конца марта до начала апреля следующего года, но ggplot () отображает только значения между августом и январем и отображает только метки месяцев в этом диапазоне по оси y.

Любая помощь в решении этой проблемы приветствуется!

Вот код и соответствующий график:

    gender <- c(rep("female",144), rep("male",144))  
days <- c(274,285,302,330,117,230,271,207,235,249,268,NA,NA,NA,NA,210,255,290,267,252,257,268,288,220,264,270,277,303,222,252,296,323,369,NA,258,NA,240,245,310,271,272,282,314,345,214,211,258,268,145,176,244,273,249,257,277,284,272,273,272,282,290,297,260,266,277,213,247,244,269,349,268,NA,220,235,269,299,266,273,274,307,285,299,300,224,257,284,291,305,278,294,455,280,262,272,276,295,338,264,339,232,277,230,270,312,276,285,308,241,273,340,249,260,270,352,297,217,247,287,320,191,249,265,287,320,432,262,265,324,309,234,441,409,264,381,262,276,316,330,252,264,298,315,287,330,274,287,371,237,259,266,349,247,249,241,333,379,486,198,249,270,275,279,314,182,234,252,289,319,216,262,293,234,272,284,311,258,NA,299,314,290,292,296,300,274,289,359,267,319,NA,492,294,319,293,265,273,315,307,315,287,378,238,239,315,325,361,249,NA,192,224,226,204,208,234,263,283,294,430,267,273,307,327,460,240,307,319,492,300,311,485,348,297,348,317,317,318,338,316,316,336,255,284,316,249,302,307,308,301,265,273,316,281,326,272,283,NA,NA,243,254,271,191,259,324,287,265,310,337,287,326,304,399,337,295,313,228,288,307,270,347,290,245,NA,283,423,223,NA,264,314,283)
mytable <- data.frame(gender,days)
range(mytable$days, na.rm=T) # 117 to 492
mytable$months <- (as.Date(days,origin = "2015/1/1"))

ggplot(mytable, aes(x=gender, y=months,fill=gender)) +
  geom_boxplot()

введите здесь описание изображения


person Sergio Nolazco    schedule 18.07.2018    source источник


Ответы (1)


Я не уверен в интуиции, стоящей за этим сюжетом. Но это даст вам то, что вы желаете:

ggplot(mytable, aes(x=gender, y=months, fill=gender)) +
  geom_boxplot() + 
  scale_y_date(date_labels="%b ", date_breaks  ="1 month", 
               limits = c(as.Date("2015-3-1"), as.Date("2016-2-1")))

введите здесь описание изображения

person Prradep    schedule 18.07.2018
comment
Благодарность! это именно то, что мне нужно. Не имеет особого смысла, но только после описания. - person Sergio Nolazco; 19.07.2018