簡體   English   中英

在R中按小時逐日繪制的最佳方法

[英]Best way to plot by hour by day by month in r

目前,我已經在R中創建了以下數據框,但是在可視化方面遇到了麻煩。

數據框如下所示:

date   weekday   dayhour    amount
2017-06    0         1         100
2017-06    0         2         200
2017-06    0         3         150
2017-06    0         4         600
2017-06    0         5         75
....
2018-06    6         21        60
2018-06    6         22        90
2018-06    6         23        150
2018-06    6         24        110

該金額是該月該工作日按小時的平均值。 因此,例如,2017年6月在6月每個星期一的第一個小時的平均數量為100。

現在的想法是將我的數據繪制在R中的幾個圖形中,這些圖形將按小時按小時顯示給定月份的數據。 因此,有12個圖,每個圖的y軸和小時+工作日的x軸。

我嘗試了幾種方法,例如遍歷月份並使用par(mfrow = c(2,6))進行繪制。 我也嘗試一一畫出它們。 但是,我仍然是R的新秀,我找不到有關如何執行此操作的任何好的文檔或教程。 目前,我只能通過在工作日(而不是小時)將數據點堆疊在一個循環中,方法是在不包含小時數的情況下對數據集執行以下操作:

increase = 7
for (i in (length(occupancy_by_day)/7)) {
  data = head(occupancy_by_day,increase:increase+increase)
  plot(average_occupancy ~ Weekday, data=data)
  increase = increase + 7
}

目前,我最接近正確答案的猜測是:

par(mfrow = c(2,6))

increase = 06
for (i in (length(occupancy_by_day)/30,5)) {
  data = occupancy_by_day[occupancy_by_day$date == paste(c('2017-',increase)), ]
  plot(amount ~ weekday, data=data)
  increase = increase + 1
}

這給了我錯誤:

Error in plot.window(...) : need finite 'xlim' values

有誰知道在R中繪制數據的好方法嗎?

預先感謝您的任何幫助/評論!

編輯:在這篇文章上的優先級將是如何按小時按小時繪制數據。 我可以手動迭代幾個月,但是仍然需要繪制它們。 每個月的循環將增加獎金。 現在,我有以下內容:

data =occupancy_by_day[occupancy_by_day$date == '2017-06', ]
plot(Amount ~ weekday+dayhour, data=data)

可悲的是,這僅按白天繪制數據。

概念的附加圖紙: https : //imgur.com/qKFbbmJ

回答:

最終,我做了一個小問題的解決方法來繪制它們:

ggplot(data = data[data$date == '2017-12', ], aes(plotstamp, Amount, group=Weekday, col=Weekday)) + 
   geom_line() +
   geom_point() + 
   ggtitle("December 2017")

plotstamp是我添加到DF中的一個額外的列/索引,它允許我連續繪制值。 然后,我每月單獨繪制它們。

進行類似的數據

我認為這是您在編輯中要求的部分解決方案(如果我正確地理解了您的任務),但是我相信您可以以相同的方式瀏覽幾個月。 我能想到的唯一方法是將日期轉換為日期類。 我使用了一些准備好的日期數據,但是您可以使用strptime()paste()命令來匹配我的數據。 而且,我所做的數據只有兩天。

date1 <- c(rep("2017-06-1",24),rep("2017-06-2",24))
weekday <- c(rep(0,24),rep(1,24))
dayhour <- c(1:24,1:24)
# Add dayhour to date
date <- paste(date1, dayhour, sep = " ")
date <- strptime(date, "%Y-%m-%d %H")
amount <- c(1:24,(48:25)*2)

dat <- data.frame(date,weekday,dayhour,amount)
View(dat)

plot(x=dat$date, y=dat$amount)

這就是我創建的數據的樣子。

                 date weekday dayhour amount
1 2017-06-01 01:00:00       0       1      1
2 2017-06-01 02:00:00       0       2      2
3 2017-06-01 03:00:00       0       3      3
4 2017-06-01 04:00:00       0       4      4
....
46 2017-06-02 22:00:00       1      22     54
47 2017-06-02 23:00:00       1      23     52
48 2017-06-03 00:00:00       1      24     50

循環繪圖。

如果在R markdown文檔中編寫此代碼,則每個圖都會得到漂亮的頁面,因此您不必使用par(mfrow = c(1,2)) 您可能還需要修復循環參數以適合您的數據。

par(mfrow = c(1,2))
start <- 0
end <- 23
step = 1
for (i in 1:(length(dat$date)/24)) {
  data <- dat[(start+step) : (end+step), ]  # The parenteses at (start+step) and (end+step) are important!
  plot(x = data$date, y = data$amount)
  step = step + 23
}

希望對您有所幫助。

PS:這是我寫的第一個答案,請隨時編輯或改善我的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM