我正在ggplot2(在R中)中绘制值~date.我有以下代码.如您所见,ggplot2在我的数据中添加了x轴上的更多中断.每当我的数据框中有数据点时,我只想拥有x标签.如何强制ggplot2只显示my.dates值的中断?似乎scale_x_date没有“break”参数
require(ggplot2) my.dates = as.Date(c("2011-07-22","2011-07-23","2011-07-24","2011-07-28","2011-07-29")) my.vals = c(5,6,8,7,3) my.data <- data.frame(date =my.dates,vals = my.vals) plot(my.dates,my.vals) p <- ggplot(data = my.data,aes(date,vals))+ geom_line(size = 1.5) p <- p + scale_x_date(format="%m/%d",' ') p
解决方法
一种方法是将x轴视为数字,并使用scale_x_continuous()设置断点和标签美学.
ggplot(my.data,aes(as.numeric(date),vals)) + geom_line(size = 1.5) + scale_x_continuous(breaks = as.numeric(my.data$date),labels = format(my.data$date,format = "%m/%d"))
虽然7/24到7/28之间的休息在我看来有点奇怪.但是,我认为这就是你想要的?如果我误解了,请告诉我.
编辑
如上所述,我对上面的断点看起来并不感到兴奋,特别是背景中的灰色网格.这是维护矩形网格的一种方法,仅标记我们拥有数据的点.你可以在ggplot调用中完成所有这些,但我认为在ggplot之外进行处理更容易.首先,创建一个包含与日期对应的数字序列的向量.然后我们将更新相应的标签并用“”替换NA条目,以防止在x轴上为这些条目绘制任何内容:
xscale <- data.frame(breaks = seq(min(as.numeric(my.data$date)),max(as.numeric(my.data$date))),labels = NA) xscale$labels[xscale$breaks %in% as.numeric(my.data$date)] <- format(my.data$date,format = "%m/%d") xscale$labels[is.na(xscale$labels)] <- " "
这给了我们一些看起来像:
breaks labels 1 15177 07/22 2 15178 07/23 3 15179 07/24 4 15180 5 15181 6 15182 7 15183 07/28 8 15184 07/29
然后可以将其传递给这样的比例:
scale_x_continuous(breaks = xscale $breaks,labels = xscale $labels)