Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.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
在R中使用绘图时,如何用日期替换X轴上的数字?_R_Plot - Fatal编程技术网

在R中使用绘图时,如何用日期替换X轴上的数字?

在R中使用绘图时,如何用日期替换X轴上的数字?,r,plot,R,Plot,我想用日期而不是数字来表示x实验室。 例如,如果绘制: f=c(2,1,5,4,8,9,5,2,1,4,7) plot(f) 根据我们有多少个值,你会得到x轴的数字范围。 例如,我如何将第一个值设置为2012年1月4日,第二个值设置为2012年1月5日,依此类推,然后将它们作为日期而不是数字显示在x轴上 我的数据中没有日期,但我知道第一个日期 提前感谢您可以自己标记轴,也可以通过使用“Date”类为您的观察创建日期向量,让R为您标记轴。以下是一个例子: f <- c(2,1,5,4,

我想用日期而不是数字来表示x实验室。 例如,如果绘制:

 f=c(2,1,5,4,8,9,5,2,1,4,7)
 plot(f)
根据我们有多少个值,你会得到x轴的数字范围。 例如,我如何将第一个值设置为2012年1月4日,第二个值设置为2012年1月5日,依此类推,然后将它们作为日期而不是数字显示在x轴上

我的数据中没有日期,但我知道第一个日期


提前感谢

您可以自己标记轴,也可以通过使用
“Date”
类为您的观察创建日期向量,让R为您标记轴。以下是一个例子:

f <- c(2,1,5,4,8,9,5,2,1,4,7)
dates <- seq(as.Date("04/01/2012", format = "%d/%m/%Y"),
             by = "days", length = length(f))

plot(dates, f)
情节是这样的:

如果您需要更多的控制以及标签的内容与现有的完全相同,则需要禁止绘制x轴,然后使用
axis.Date
手动添加它,例如

plot(dates, f, xaxt = "n")
axis.Date(side = 1, dates, format = "%d/%m/%Y")
产生

您可能还希望在此处旋转轴标签,例如使用
las=2

有关更多详细信息,请参见轴日期、strftime和as.Date

使用
axis.Date
要覆盖记号放置的默认启发式,请使用
at
参数指定记号的位置。例如,对于700天的较长日期序列,我们可能会在每个月初放置标签:

set.seed(53)
f <- rnorm(700, 2)
dates <- seq(as.Date("04/01/2012", format = "%d/%m/%Y"),
             by = "days", length = length(f))
head(f)
set.seed(53)

f@ZadSim现在有一种方法可以在x轴上安装700个标签,除非您使绘图窗口非常大或标签非常小。你为什么每天都要贴标签?读取
?axis.Date
,这样您就可以控制标签的放置位置等。(提示:请参见
at
参数。)@ZadSim您看到的行为只是R简化绘图的内置方式-如果只有一个记号,则R通过一些试探法决定只需要一个记号。您可以通过使用
at
参数到
axis.Date
指定记号(和标签)的位置来覆盖此选项。请参见
?axis.Date
的示例部分,因为该部分说明了如何在
@ZadSim使用
,例如,如果日期跨越一年开始的任意一侧。这是一个简单的启发式方法,正如axis.Date所说,它可以被覆盖。如果您想标记每个月的开始。我不确定你是否还不知道该怎么做;但是我会更新这个例子,让它包含一些关于这个的东西。下一次,即使你用一个小例子来说明,也要在你的问题中更具体地说明实际问题的大小。
set.seed(53)
f <- rnorm(700, 2)
dates <- seq(as.Date("04/01/2012", format = "%d/%m/%Y"),
             by = "days", length = length(f))
head(f)
op <- par(mar = c(7,4,4,2) + 0.1) ## more space for the labels
plot(dates, f, xaxt = "n", ann = FALSE)
labDates <- seq(as.Date("01/01/2012", format = "%d/%m/%Y"), tail(dates, 1),
                by = "months")
axis.Date(side = 1, dates, at = labDates, format = "%b %y", las = 2)
title(ylab = "f") ## draw the axis labels
title(xlab = "dates", line = 5) ## push this one down a bit in larger margin
par(op) ## reset margin
op <- par(mar = c(7,4,4,2) + 0.1) ## more space for the labels
plot(dates, f, xaxt = "n", ann = FALSE)
labDates <- seq(as.Date("01/01/2012", format = "%d/%m/%Y"), tail(dates, 1),
                by = "2 months")
## new dates for minor ticks
minor <- seq(as.Date("01/02/2012", format = "%d/%m/%Y"), tail(dates, 1),
             by = "2 months")
axis.Date(side = 1, dates, at = labDates, format = "%b %y", las = 2)
## add minor ticks with no labels, shorter tick length
axis.Date(side = 1, dates, at = minor, labels = FALSE, tcl = -0.25)
title(ylab = "f") ## draw the axis labels
title(xlab = "dates", line = 5) ## push this one down a bit in larger margin
par(op) ## reset margin