gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 18:59:00 25 4
gpt4 key购买 nike

我想将 x 实验室显示为日期而不是数字。例如,如果您绘制:

 f=c(2,1,5,4,8,9,5,2,1,4,7)
plot(f)

你会根据我们有多少个值得到 x 轴上的数字范围。例如,我如何将第一个值设置为 04/01/2012,第二个值设置为 05/01/2012 等等,然后将它们作为日期而不是数字显示在 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)

日期最终是:

> dates
[1] "2012-01-04" "2012-01-05" "2012-01-06" "2012-01-07" "2012-01-08"
[6] "2012-01-09" "2012-01-10" "2012-01-11" "2012-01-12" "2012-01-13"
[11] "2012-01-14"

情节如下:

enter image description here

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

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

产生

enter image description here

您可能还想旋转那里的轴标签,例如使用las = 2

有关更多详细信息,请参阅 ?axis.Date?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)

绘图稍微复杂一些,但不多

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

这会导致:

enter image description here

您可以更改此主题,例如每隔一个月标记一次,其他月份小勾

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

结果

enter image description here

重点是,如果您不喜欢默认值,您可以完全控制轴的标记位置,只需为轴创建日期向量即可。您想要的标签/刻度线的位置。

关于r - 在R中使用绘图时如何用日期替换X轴上的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15575625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com