Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ggplot2和R中缩放x_日期的中断_R_Ggplot2 - Fatal编程技术网

ggplot2和R中缩放x_日期的中断

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

我正在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-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