ggplot2和R中缩放x_日期的中断
我正在ggplot2(R)中绘制值~日期。我有以下代码。如您所见,ggplot2在数据中的x轴上添加了更多打断。我只想每次在数据框中有一个数据点时都有一个x标签。如何强制ggplot2仅在my.dates的值处显示中断?似乎对scale\u x\u date没有“breaks”的说法ggplot2和R中缩放x_日期的中断,r,ggplot2,R,Ggplot2,我正在ggplot2(R)中绘制值~日期。我有以下代码。如您所见,ggplot2在数据中的x轴上添加了更多打断。我只想每次在数据框中有一个数据点时都有一个x标签。如何强制ggplot2仅在my.dates的值处显示中断?似乎对scale\u x\u date没有“breaks”的说法 require(ggplot2) my.dates = as.Date(c("2011-07-22","2011-07-23", "2011-07-24","2011-07
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
require(ggplot2)
我的日期=截止日期(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一种方法是将x轴视为数字轴,并使用scale\u x\u continuous()
设置断点和标签
虽然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)] <- " "
然后可以像这样传递到秤上:
scale\u x_continuous(breaks=xscale$breaks,labels=xscale$labels)
非常感谢。第一部分解决了我的问题。你知道我如何保持x轴断裂,但删除其网格线吗?@Mark-选项(panel.grid.major=theme\u blank(),panel.grid.minor=theme\u blank())
应该可以。抛出错误:在ggplot2 1.0.0
@MYaseen208中提供给连续缩放的离散值对我来说很好。您可能需要单独加载scales
软件包。总的来说-互联网上的解决方案有一个有限的时间框架,这是在3.5年前的这一点上;如果您愿意,请随意修改答案以更新它。任何明显被破坏的东西都不会被破坏。我得到了与@MYaseen208相同的错误,并且我加载了刻度。另请参见:“日期刻度将尝试为主刻度线和次刻度线选择合理的默认值。使用日期分隔符、日期标签、日期分隔符参数覆盖。”
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