首页 > 解决方案 > R:ggplot2 不接受“周”日期格式

问题描述

我在 R 中有以下形式的数据:周年(例如 21-03,2003 年的第 21 周)。在我的真实数据中,这些日期以字符格式显示。

我正在尝试在 R 中绘制这些数据,但日期格式无法正常工作。我尝试尽可能接近地重新创建数据,然后运行绘图:

library(dplyr) 
 library(ggplot2) 
 library(reshape2)  
library(scales)
library(lubridate)       

  Table_1 <- data.frame(  "Col_A" = c("21-03", "21-03", "21-03", "21-04", "21-04", "21-04", "21-05", "21-05", "21-05"), 
 "Col_B" = c("AAA", "AAB", "AAC", "AAA", "ABB", "AAC", "AAA", "AAB", "AAC"), 
 "Col_C" = c(111, 122.5, 9, 727, 66.4, 3, 992, 88, 12)      )

Table_1$col_A_Date <- as.Date(Table_1$col_A, format = "%W-%y")
 Table_1$Col_B = as.factor(Table_1$Col_B) 
 Table_1$Col_C = as.numeric(Table_1$Col_C) 

melt = melt(Table_1, id = c("Col_A"))  

p = ggplot(melt, aes(x = Col_A, y=value, group = 1)) + geom_line(aes(color=variable)) +
 facet_grid(variable ~., scales = "free_y") + scale_x_date(date_labels = "W%-%y", date_breaks = '1 month') + theme(axis.text, x = element_text(angle = 45))   

final = p + scale_y_continuous(labels = comma)  

有人可以告诉我我做错了什么吗?

谢谢

标签: rdateggplot2data-visualization

解决方案


您的帖子中有一些拼写错误,并且其中包含日期的列是,col_A_Date因此您需要将其用作in和 drop的id变量。这是一种方法。meltCol_Atidyverse

library(tidyverse)

Table_1 %>%
  mutate(col_A_Date = as.Date(Col_A, format = "%W-%y")) %>%
  select(-Col_A) %>%
  mutate(across(c(Col_B, Col_C), as.character)) %>%
  pivot_longer(cols = -col_A_Date) %>%
  ggplot(aes(x = col_A_Date, y=value, group = 1)) + 
  geom_line(aes(color=name)) +
  facet_grid(name ~., scales = "free_y") + 
  scale_x_date(date_labels = "W%-%y", date_breaks = '1 month') + 
  theme(axis.text = element_text(angle = 45))   

推荐阅读