我试图了解我的数据在工作日的每小时频率。因此,我将不同的日期浓缩为一天,这样只有时间不同,并添加了一个表示星期几的列作为有序因子。
以下是我的数据的摘录:
my.log <- structure(list(Prorated = structure(c(1339535400, 1339536540, 1339524540, 1339480320, 1339537920, 1339529580, 1339500780, 1339532820, 1339522020, 1339522680, 1339465560, 1339529940, 1339472880, 1339508520, 1339519620, 1339536000, 1339526580, 1339514940, 1339518060, 1339512420, 1339513080, 1339500120, 1339543620, 1339485660, 1339496280, 1339526520, 1339514820, 1339531800, 1339531860, 1339501320), class = c("POSIXct", "POSIXt"), tzone = "%Y-%m-%d %H:%M:%S"), Wday = structure(c(1, 1, 1, 2, 1, 2, 2, 2, 2, 2, 3, 2, 3, 3, 3, 3, 4, 1, 1, 3, 3, 4, 4, 5, 5, 5, 1, 2, 2, 2), .Label = c("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"), class = c("ordered", "factor"))), .Names = c("Prorated", "Wday"), row.names = c(NA, 30), class = "data.frame")
range(my.log$Prorated)
# here (n = 30):
# [1] "2012-06-12 01:46:00" "2012-06-12 23:27:00"
# w/ full data set (n = approx. 75000):
# [1] "2012-06-12 00:00:00" "2012-06-12 23:59:00"
当我现在尝试使用以下代码绘制密度图时......
library("ggplot2")
library("scales")
p <- ggplot(my.log) + theme_bw() +
geom_density(aes(Prorated, colour=Wday)) +
scale_color_brewer("weekday", palette="Dark2") +
scale_x_datetime("", breaks=date_breaks("4 hours"),
labels=date_format("%H:00")) +
opts(title="Distribution (KDE)")
print(p)
...两个数据集的 x 轴不是从 00:00 开始,而是从凌晨 02:00 开始,因此整个密度图移到了第二天。(我想在这里张贴一张图片,但由于我是新手所以我不允许这样做。你可以在ImageShack找到它)
因此,我的问题是:是否可以选择告诉 qqplot() 它应该在 00:00 开始其密度图?
我检查了相关问题(或分别回答),但找不到任何问题。我想到的唯一选择是要么xlim()
要么scale_x_continuous(limits=...)
。但据我了解,两者都不是正确的。
前者会丢弃数据点(或不丢弃,因为输入 data.frame 的所有数据都已经在正确的范围内),而后者只会改变视点,结果会在 23:59 切断图表而不添加这些(现在隐藏)开始时的数据点......所以,当我使用
scale_x_datetime("", breaks=date_breaks("4 hours"), labels=date_format("%H:00"),
limits=c(as.POSIXct("2012-06-12 00:00:00"), as.POSIXct("2012-06-12 23:59:00"))
在上面的代码中,图表看起来错误/没有显示所有数据。