我有一个有两列的R数据框架.var列包含任何变量,而date列包含日期的每日序列.我正在try 生成一个条形图,其中变量在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()

enter image description here

但是,X轴刻度明显向左移动.如果你看最后一个勾号(代表"2021-12-01"),它应该几乎出现在最后.

我怎么才能解决这个问题呢?

推荐答案

Update:

根据这篇帖子,使用公式法How to put date on barplot() x-axis?是一个更容易的 Select .我们仍然要考虑并调整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()

enter image description here

R相关问答推荐

根据shiny 应用程序中的数字输入更改图标 colored颜色

如何在R中添加截止点到ROC曲线图?

如何直接从Fortran到R的数组大小?

R函数‘paste`正在颠倒其参数的顺序

如何在观测缺失的地方添加零

R中的时间序列(Ts)函数计数不正确

以更少间隔的较小表中的聚合离散频率表

根据类别合并(汇总)某些行

R中1到n_1,2到n_2,…,n到n_n的所有组合都是列表中的向量?

从服务器在Shiny中一起渲染图标和文本

有没有一种方法可以同时对rhandsontable进行排序和从rhandsontable中删除?

如何使用For-R循环在向量中找到一系列数字

使用未知字符数(不受限制的最大长度)的Lookback有什么好的替代方案?

R代码,用于在线条图下显示观测表

如何计算每12行的平均数?

带RStatix的Wilcoxon环内检验

用多边形替换地块点

将每晚的平均值与每晚的值进行比较,统计是否有效?

我怎么才能把一盘棋变成一盘棋呢?

如何使用包含要子集的值的列表或数据框来子集多个列?