【问题标题】:How can I plot a time series that shows only days on x-axis?如何绘制仅在 x 轴上显示天数的时间序列?
【发布时间】:2015-09-30 18:32:14
【问题描述】:

我想用 R 绘制这个时间序列图。

我的数据集是一个时间序列,包括天、小时和分钟。我希望情节只显示一周中的哪一天。当我使用普通的plot(x,y) 时,我得到了box plot,但我无法弄清楚这个情节的类型。谁能帮我弄清楚情节以及可以使用哪个函数来获得这样的情节。

实际数据负责人:

head(data)
#        Date     Time Global_active_power Global_reactive_power Voltage
#1 2006-12-16 17:24:00               4.216                 0.418  234.84
#2 2006-12-16 17:25:00               5.360                 0.436  233.63
#3 2006-12-16 17:26:00               5.374                 0.498  233.29
#4 2006-12-16 17:27:00               5.388                 0.502  233.74
#5 2006-12-16 17:28:00               3.666                 0.528  235.68
#6 2006-12-16 17:29:00               3.520                 0.522  235.02

#  Global_intensity Sub_metering_1 Sub_metering_2 Sub_metering_3
#1             18.4              0              1             17
#2             23.0              0              1             16
#3             23.0              0              2             17
#4             23.0              0              1             17
#5             15.8              0              1             17
#6             15.0              0              2             17

最小可重现数据集:

set.seed(123)
data <- data.frame(Date = as.Date(rep(c("2006-06-16", "2006-06-17"), each = 1440)),
  Time = format(as.difftime(0:1439, units = "mins") + as.POSIXct("2006-06-16"), "%H:%M"),
  Global_active_power = cumsum(rnorm(2880, 0.02, 0.02) * rep(rep(c(1, -1), 4), 2880 / 8)))

在这个阶段,我尝试了以下方法:

x <- weekdays(data$Date)
y <- data$Global_active_power

plot(x, y)

但我得到了一个箱线图。

【问题讨论】:

  • 确保您的x 变量不会意外变成一个因素。给我们summary(x)summary(y)
  • plot 是一个通用函数,根据您传入的数据,创建箱线图、时间序列图……。换句话说:你得到什么取决于你传入的数据。因此:请在你的问题中添加dput(x);dput(y)
  • 我们没有您的数据,也没有读心术。对于初学者,您可以尝试type = "l",但我猜您默认获得箱形图是有原因的。
  • x 由“星期四”和“星期五”组成。您如何期望将其转换为折线图?
  • 我希望我的 y 针对一周中的不同日子进行绘图。我有一个列日期,我通过使用 weekdays 函数将其添加到数据集中作为 x,我想在 x 和 y 之间绘制图表

标签: r plot time-series timeserieschart


【解决方案1】:

也许这就是你想要的:

set.seed(123)
data <- data.frame(Date = as.Date(rep(c("2006-06-16", "2006-06-17"), each = 1440)),
                   Time = format(as.difftime(0:1439, units = "mins") + 
                                 as.POSIXct("2006-06-16"), "%H:%M"),
                   Global_active_power = cumsum(rnorm(2880, 0.02, 0.02) *
                                         rep(rep(c(1, -1), 4), 2880 / 8)))

data$datetime <- as.POSIXct(paste(data$Date,data$Time),tz="UCT")
plot(data$datetime,data$Global_active_power,type="l")

剧情如下:

【讨论】:

    猜你喜欢
    • 2020-07-01
    • 2014-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    • 1970-01-01
    • 2021-09-27
    相关资源
    最近更新 更多