ggplot x-axis break.vec даты начала и окончания - PullRequest
0 голосов
/ 18 мая 2018

У меня есть некоторые данные, которые я строю в ggplot, и я бы хотел, чтобы дата на оси x начиналась раньше, чтобы я мог лучше сравнить ее с другими графиками. Фиктивные данные внизу.

###plot line graph

cell1 <- ggplot(df[!is.na(df$value), ], aes(x=Date, y=value,  colour 
=variable, group = variable,shape = variable, linetype = variable, fill 
= variable))
cell1 <- cell1 + geom_line(lwd =3) + geom_point(size =17, stroke = 2)

Я хочу, чтобы он начинался с 16-06-2018 и имел еженедельные отметки по 04-08-2016. Я использовал break.vec () с некоторым успехом, но поскольку этот набор данных начинается ближе (т. Е. Первая точка данных на 20-06-2016) ко второй отметке, он полностью сбрасывает первую и начинается с 23- 06-2016. Я уверен, что мне просто не хватает чего-то простого.

###adjust x-axis

break.vec <- c(as.Date("2016-06-16"),
           seq(from=as.Date("2016-06-16"), to=as.Date("2016-08-04"), 
by="week"))
cell1 <- cell1 + scale_x_date(breaks = break.vec, date_labels = "%d- 
%m",expand = c(0.05,0))

Любой вклад приветствуется

df <- structure(list(Date = structure(c(16968, 16969, 16970, 16971, 
16972, 16973, 16974, 16975, 16976, 16977, 16978, 16979, 16980, 
16981, 16982, 16983, 16984, 16985, 16986, 16987, 16988, 16989, 
16990, 16991, 16992, 16993, 16994, 16995, 16996, 16997, 16998, 
16999, 17000, 17001, 17002, 17003, 17004, 17005, 17006, 17007, 
17008, 17009, 17010, 17011, 17012, 17013, 17014, 17015, 17016
), class = "Date"), variable = structure(c(1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = 
"total.cell.L", class = "factor"), 
value = c(NA, NA, NA, NA, 64730L, NA, NA, NA, 138128L, NA, 
NA, NA, 64230L, 84194L, NA, 87666L, NA, NA, NA, NA, 8980L, 
NA, NA, NA, 24503L, NA, NA, 72042L, 55651L, NA, NA, NA, NA, 
17360L, NA, NA, NA, NA, 57287L, NA, NA, NA, 98081L, NA, 46003L, 
NA, 122385L, NA, 177067L)), row.names = c(NA, -49L), .Names = c("Date", 
"variable", "value"), class = "data.frame")

1 Ответ

0 голосов
/ 18 мая 2018

Чтобы получить точную дату начала, которую вы хотите, используйте expand_limits.В приведенном ниже коде мы используем самую раннюю дату в break.vec в качестве начального значения:

cell1 + 
  scale_x_date(breaks = break.vec, date_labels = "%d-%m") +
  expand_limits(x=min(break.vec))

Другим способом установки пределов оси является аргумент limits для scale_x_date:

cell1 + 
  scale_x_date(breaks = break.vec, date_labels = "%d-%m", limits=range(break.vec))

Вы также можете использовать аргумент expand в scale_x_date для управления количеством отступов, добавляемых к оси x, но limits и expand_limits дают вам точный контроль над размещением ограничений.

...