R条形图中向左移动的日期的X轴

unhi4e5o  于 2023-05-04  发布在  其他
关注(0)|答案(2)|浏览(161)

我有一个R数据。有两个柱子的框架。var列包含任何变量,而date列包含日期的每日序列。我试图生成一个条形图,其中变量在Y轴上绘制,日期在X轴上绘制。
由于日期太多,所以添加每个月的第一天会很方便。我正在做以下工作:

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

# Plot
barplot(df$var, 
        col="darkorange", border=NA, las=1, xaxt='n',
        main="var: random variable")
dts <- seq(from=as.Date(df$date[1]), to=as.Date(df$date[nrow(df)]), by="months")
ind <- c()
for(d in 1:length(dts)){
  m <- match(dts[d], df$date)
  ind <- c(ind, m)
}
axis(1, at=ind, labels=df$date[ind])
box()

但是,X轴刻度明显向左移动。如果你看最后一个刻度(代表“2021-12-01”),它应该几乎出现在最后。
我该如何解决这个问题?

xzv2uavs

xzv2uavs1#

我不知道如何在基础图形中修复您的绘图,但我可以展示一个简单的ggplot版本:

library(ggplot2)
ggplot(df, aes(x = date, y = var)) +
  geom_col(fill = "darkorange") +
  scale_x_date(date_breaks = "1 month") +
  labs(title = "var: random variable") +
  theme_bw() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

ctehm74n

ctehm74n2#

更新:

How to put date on barplot() x-axis?使用公式方法是一个更容易的选择。我们仍然需要考虑并调整width
现在没有左移了!

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

# Plot

barplot(df$var ~ df$date, col = "darkorange",
        border=NA, las=1, xaxt='n', width = 0.8,
        main="var: random variable", xlab = "date", ylab="var")

dts <- seq(from=as.Date(df$date[1]), to=as.Date(df$date[nrow(df)]), by="months")
ind <- c()
for(d in 1:length(dts)){
  m <- match(dts[d], df$date)
  ind <- c(ind, m)
}
axis(1, at=ind, labels=df$date[ind])
box()

相关问题