【问题标题】:"Error: Invalid input: date_trans works with objects of class Date only" while trying to providing break to x-axis of format "year-week"/"%Y-%W"“错误:输入无效:date_trans 仅适用于 Date 类的对象”,同时尝试为格式为“年-周”/“%Y-%W”的 x 轴提供中断
【发布时间】:2018-03-06 16:21:27
【问题描述】:

我正在处理的主要问题是在绘图的 x 轴上提供中断。 现在,我的 x 轴基于一年中的第几周,格式为 YYYY-WW

我使用 ggplot2 尝试了不同的方法。

似乎最有希望的是使用图书馆秤。

但现在我因为错误而卡住了

“错误:输入无效:date_trans 仅适用于 Date 类的对象”。

这是我的代码 sn-p:

library(ggplot2)
library(reshape2)
library(scales)
data4 <- read.csv("C:\\Users\\Shailesh\\Anaconda3\\Scripts\\4c.csv")


data4 <- melt(data4,  id.vars = c("WEEK.NUMBER", "CURRENT.WEEK.DEATHS", "PREVIOUS.WEEKS.DEATHS"), 
          measure.vars = c("CURRENT.WEEK.DEATHS", "PREVIOUS.WEEKS.DEATHS"))

head(data4)


ggplot(data4, aes(fill=variable, y=value, x=factor(WEEK.NUMBER)), color="black") + 
  geom_bar( stat="identity") +
  labs(x = "Week of Death", y="Number of Deaths") +
  scale_fill_manual(name = '', guide = 'legend',labels = c('Death Reported Previous Week', 'Death Reported Current Week'),
  values = c( "#00ffff","#009933")) +
  #scale_x_date(breaks = date_breaks("1 weeks"), labels = date_format("%Y-%W"))+
  theme(legend.position='bottom') + 
  theme( axis.text.x = element_text(angle = 90, hjust = 1, size =5))

这是我在注释掉时得到的情节:

"scale_x_date(breaks = date_breaks("1 weeks"), labels = date_format("%Y-%W"))"

这是熔化后数据帧的头部:

如何解决这个错误,如何让 x 轴中断?

任何会有所帮助!谢谢!

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    只需从您的 WEEK.NUMBER 创建一个 Date 类型字段并将其传递到 aes() 调用的 x 中。此外,您应该在 @987654325 的 id.vars 中省略冗余变量 CURRENT.WEEK.DEATHSPREVIOUS.WEEKS.DEATHS @。

    data4 <- melt(data4, id.vars = c("WEEK.NUMBER"), 
                  measure.vars = c("CURRENT.WEEK.DEATHS", "PREVIOUS.WEEKS.DEATHS"))
    
    data4$week_date <- as.Date(paste(data4$WEEK.NUMBER, 1, sep="-"), format="%Y-%W-%w")
    

    或者,transform:

    data4 <- transform(melt(data4, id.vars=c("WEEK.NUMBER"), 
                            measure.vars=c("CURRENT.WEEK.DEATHS", "PREVIOUS.WEEKS.DEATHS")),
                       week_date = as.Date(paste(WEEK.NUMBER,1,sep="-"), format="%Y-%W-%w"))
    

    下面演示了随机数据,为可重复性播种,其中 data4 正在尝试复制您融合的数据,跨越 2016 年和 2017 年的最后几周。

    library(ggplot2)
    library(scales)
    
    set.seed(306)
    data4 <- data.frame(WEEK.NUMBER = as.vector(outer(2016:2017, 40:52, 
                                                      function(x,y) paste(x, y, sep="-"))),
                        variable = c(rep("CURRENT.WEEK.DEATHS", 26), 
                                     rep("PREVIOUS.WEEK.DEATHS", 26)),
                        value = sample(0:5, 52, replace = TRUE), stringsAsFactors = FALSE)
    
    # NEW DATE VARIABLE
    data4$week_date <- as.Date(paste(data4$WEEK.NUMBER, 1, sep="-"), format="%Y-%W-%w")
    
    ggplot(data4, aes(fill=variable, y=value, x=week_date), color="black") + 
      geom_bar( stat="identity") +
      labs(x = "Week of Death", y="Number of Deaths") +
      scale_fill_manual(name = '', guide = 'legend',
                        labels = c('Death Reported Previous Week', 'Death Reported Current Week'),
                        values = c( "#00ffff","#009933")) +
      scale_x_date(breaks = date_breaks("1 weeks"), labels = date_format("%Y-%W"))+
      theme(legend.position='bottom') + 
      theme( axis.text.x = element_text(angle = 90, hjust = 1, size =5))
    

    【讨论】:

    • 感谢您提供非常准确的答案。非常感谢您的时间和精力!
    • 没问题。乐意效劳。编码愉快!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2020-05-03
    • 1970-01-01
    相关资源
    最近更新 更多