在R条形图的X轴上添加日期[重复]

lnlaulya  于 2023-05-04  发布在  其他
关注(0)|答案(1)|浏览(125)

此问题已在此处有答案

How to put date on barplot() x-axis?(1个答案)
昨天关门了。
我有一个R数据。有两个柱子的框架。var列包含任何变量,而date列包含日期的每日序列。我试图生成一个条形图,其中变量在Y轴上绘制,日期在X轴上绘制。
由于日期太多,所以添加每个月的第一天会很方便。但是,我无法将日期添加到X轴。
下面是一个小例子:

# Example data
set.seed(1234)
df <- data.frame(
  var = runif(n=365, min=1, max=20),
  date = seq(from=as.Date('2022-01-01'), to=as.Date('2022-12-31'), by=1)
)

# Plot
barplot(df$var, main="var: random variable",
        col="darkorange", border=NA, las=1)
box()

如何按月添加日期?

tp5buhyn

tp5buhyn1#

一些选项:

ggplot2

library(ggplot2)
ggplot(df, aes(date, var)) +
  geom_bar(stat="identity", fill="darkorange")
  ### or
  # geom_col()

如果你想玩X轴格式(e.例如,从"%m %Y"更改为其他内容,或更改标签的数量或位置),请使用scale_x_date(..)

底座R,手动轴

使用axis

bp <- barplot(df$var, main="var: random variable",
              col="darkorange", border=NA, las=1)
box()

然后,我们可以向图和/或轴添加内容。很不幸..一旦使用这种方法“抓住了”,x轴就不像人们希望的那样简单地是1:length(df$var)。如果查看bp对象,您将看到它是一个矩阵(行数为length(df$var)),其中的值是x轴位置。请注意,它开始于1之前,并在nrow(df)之后:

head(bp); tail(bp)
#      [,1]
# [1,]  0.7
# [2,]  1.9
# [3,]  3.1
# [4,]  4.3
# [5,]  5.5
# [6,]  6.7
#         [,1]
# [360,] 431.5
# [361,] 432.7
# [362,] 433.9
# [363,] 435.1
# [364,] 436.3
# [365,] 437.5

为此,我们可以在日期的定位中使用这些值。

ind <- seq(1, nrow(df), length.out = 5)
axis(1, bp[ind,], labels = df$date[ind])

135的使用完全是任意的,取决于您的偏好和数据大小。
您可以通过labels=参数完全控制文本。例如,可以使用以下命令来更接近默认的ggplot格式:

axis(1, bp[ind,], labels = format(df$date[ind], format = "%b %Y"))

base R,自动x轴标签

使用公式,如How to put date on barplot() x-axis?所示:

barplot(var ~ date, data=df, main="var: random variable",
          col="darkorange", border=NA, las=1)
box()

请注意,这不会向轴添加记号。可以使用axis.lty=1将它们相加,但是每个条形图都有一个技巧,对这些数据没有用处。

相关问题