【问题标题】:Adapt x-axis histogram when using dates使用日期时调整 x 轴直方图
【发布时间】:2016-02-29 22:06:27
【问题描述】:

我有一个存储在变量 x 中的格式为“%d%m%Y”的数据集。 我想使用直方图绘制频率(每月)。

日期范围从 5 月 1 日到 10 月 31 日。

我使用了以下代码:

hist(x,"months")

出现下图

您可以看到轴不是最优的。它给人的印象是,绘制的是 4 月的数据,而实际上是 5 月的数据。

有人能帮我把标签放在栏的中间吗?这意味着第一个元素是 May,它会被放置在栏的中间?


这是一个例子

set.seed(1)
x <- sample(seq(as.Date("2015-05-01"), as.Date("2015-10-31"), by="day"), 500, TRUE)
summary(x)
#         Min.      1st Qu.       Median         Mean      3rd Qu.         Max. 
# "2015-05-01" "2015-06-17" "2015-07-27" "2015-07-30" "2015-09-12" "2015-10-31" 

hist(x, "months")

剧情中又出现了四月。

【问题讨论】:

    标签: r plot histogram


    【解决方案1】:

    不知道为什么它不起作用......这是我的黑客工作。

    a <- hist(x, "months") # store the histogram data 
    month <- strftime(x, "%m") # extract the month
    dens <- (table(month)/sum(table(month)))/diff(a$breaks[-1]) # calculate the density
    xax <- sort(c(as.numeric(unique(month)), max(as.numeric(unique(month))) + 1))
    plot(xax, rep(max(dens), length(xax)), type = 'n', xaxt = 'n', yaxt = 'n', ylim = c(0, max(dens) + .002)) # blank plot
    rect(xleft = xax[-length(xax)], ybottom = 0, xright = xax[-1], ytop = dens) # draw bins
    axis(1, at = xax, labels =  months(seq(as.Date("2015-05-01"), as.Date("2015-11-30"), by="month"))) # add x axis
    axis(2, at = seq(0, max(dens), length = 4), labels = format(seq(0, max(dens), length = 4), digits = 2)) # add y axis
    

    【讨论】:

      【解决方案2】:

      感谢您的回答。

      这就是我同时解决它的方法(代码不是最佳的(干净的),因为它是为了显示解决方法步骤而不是最终代码而编写的):

      #Extract month from date format
      x2 <- (format(x,"%m"))
      
      #store it as a factor
      x3 <- as.factor(x2)
      
      #Replace factor names
      levels(x3) <- c("May","June","July","August","September","October")
      barplot(table(x3))
      

      结果应该是这样的。

      请注意,这不是密度图(直方图频率 = F),而是条形图。

      我想它可能看起来像这样(仅供参考 - 我是一个自学成才的“编码器”,因此可以使用更优化的方法来创建干净的代码/欢迎:

      z <- as.factor((format(x,"%m")))
      
      #Replacing factor names
      levels(z) <- c("May","June","July","August","September","October")
      
      #Plotting result
      barplot(table(z))
      

      感谢您提供的有用提示,我成功地完成了这项工作。 但是,令我惊讶的是,使用正确的标签设置创建密度图是如此困难。应该有更简单的方法吧?

      亲切的问候,

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-23
        • 2021-11-28
        • 2021-04-03
        • 2013-11-19
        • 2021-10-27
        • 2018-12-21
        • 1970-01-01
        相关资源
        最近更新 更多