ggplot x-axis break.vec开始和结束日期

时间:2018-05-17 21:01:57

标签: r ggplot2 axis-labels

我有一些我正在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开始,并且每周都有一个到2016年8月4日的时间。我一直在使用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 :(得分:2)

要获得所需的确切开始日期,请使用expand_limits。在下面的代码中,我们使用break.vec中最早的日期作为起始值:

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

设置轴限制的另一种方法是limits的{​​{1}}参数:

scale_x_date

您还可以使用cell1 + scale_x_date(breaks = break.vec, date_labels = "%d-%m", limits=range(break.vec)) 中的expand参数来控制添加到x轴的填充量,但scale_x_datelimits可让您完全控制放置限制。