首页 > 解决方案 > R:如何使用 ts_seasonal() 和 ts_heatmap() 函数在 x 轴上绘制带有星期几的图

问题描述

我正在学习如何使用“ts”对象并在 R 中进行可视化。为了练习,我想绘制一个季节性线图和热图,就像下面的图所示。 在此处输入图像描述 在此处输入图像描述

我的数据是 2020 年台北市建筑物的交易记录。对于每条交易记录,都记录了日期。这是清理后的数据:我是数据

对于季节性线图,x 轴应为星期几,y 轴应为横断面计数,每条线代表 2020 年的一个季度。

对于热图,x 轴也应该是星期几,y 轴应该是四分之一,颜色代表计数。

我尝试了几种方法,这是最接近示例的一种(代码如下所示)。尽管这些图看起来非常相似,但我认为 R 以错误的方式解释了数据。

# Setting Environment
library(ggplot2)
library(tidyverse)
library(readxl)
library(xts)
library(TSstudio)

# Load Data
taipei_trans = read.csv("taipei_trans_clean.csv")

# Data Processing
  ## Change data into wide table
taipei_trans_w = xtabs(~ Date, data = taipei_trans) %>% as.data.frame()

  ## Turn data into date form
taipei_trans_w$Date = taipei_trans_w$Date %>% as.character() %>% 
  as.numeric() %>% + 19110000 %>% as.character() %>% 
  as.Date(format = "%Y%m%d")

  ## Filter data by date
taipei_trans_w = subset(taipei_trans_w, Date >= "2020-01-01")
taipei_trans_w = subset(taipei_trans_w, Date <= "2020-12-31")

  ## Build a ts object
qutrs = taipei_trans_w$Date %>% quarters() %>% 
  factor(levels = c("Q1", "Q2", "Q3", "Q4"))

wdays = weekdays(taipei_trans_w$Date) %>%
  factor(levels = c("星期一", "星期二&quot;, "星期三&quot;, "星期四&quot;, "星期五&quot;, "星期六&quot;, "星期日&quot;),
         labels = c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"))

trans_wq = data.frame(Count = taipei_trans_w$Freq, Weekday = wdays, Quarter = qutrs) %>%
  group_by(Weekday, Quarter) %>%
  summarise(Count = sum(Count)) %>% 
  arrange(Quarter)

trans_ts = ts(trans_wq[,3], start = 1, frequency = 7)

# Plotting
ts_seasonal(trans_ts)
ts_heatmap(trans_ts)

这些是我的结果:

在此处输入图像描述 在此处输入图像描述

如果有人能告诉我关键点是什么或有其他方法,我非常感谢!

标签: rggplot2plotdayofweektemporal

解决方案


推荐阅读