在ggplot2和R中中断scale_x_date

前端之家收集整理的这篇文章主要介绍了在ggplot2和R中中断scale_x_date前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在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)

猜你在找的CSS相关文章