1. ホーム
  2. r

[解決済み] "エラーです。フォーマット "年-週"/"%Y-%W "のX軸にブレークを提供しようとしているときに「無効な入力: date_trans works with objects of class Date only」。

2022-02-03 20:18:25

質問事項

私が取り組んでいる主な問題は、プロットのX軸に区切りをつけることです。 現在、私のX軸は、その年の週をベースにした形式で YYYY-WW .

ggplot2を使っていろいろと試してみました。

最も有望と思われるのは、ライブラリのスケールを使用することです。

しかし、今、私はエラーによって立ち往生している

"エラー。Invalid input: date_trans works with objects of class Date only".

以下は私のコードスニペットです。

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"))"

融解後のdataframeの先頭です。

このエラーを解決するには、X軸にブレークを与えるにはどうすればよいですか?

どんなことでもご相談ください。ありがとうございます!

どのように解決するのですか?

を作成するだけです。 Date の型フィールドを作成します。 WEEK.NUMBER(ウィークナンバー に渡し、それを x aes() を呼び出します。また、冗長な変数は省くべきでしょう。 今週の死亡者数 前週死亡数 である。 id.vars melt .

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"))

以下は、再現性のためにシードされたランダムなデータで実証しています。 データ4 は、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))