【发布时间】:2017-07-08 21:52:53
【问题描述】:
这是我的第一个 stackoverflow 问题,因此对于礼仪或演示中的任何失误,请提前道歉。
我正在使用 R 中的 dygraphs() 包(在运行 Mavericks 的 Mac 上使用 RStudio 的 3.3.3)来绘制 18 世纪剧院的票房收入时间序列。日期从 1789-04-14 到 1791-03-07。我正在使用最新版本的 xts 包(0.10-0),但问题与之前的版本相同。作为 xts 对象,数据如下所示:
head(receipts.xts)
kr
1789-04-14 15454
1789-04-20 6985
1789-04-22 4545
1789-04-24 5342
1789-04-26 5791
1789-04-28 25139
为索引导入的日期类型为date。
(“kr”代表“kreuzer”,是当时货币记账单位的细分。)
创建dygraph的代码是:
dygraph(receipts.xts,
main = "Opera Receipts, Burgtheater, 1789-1791") %>%
dySeries("kr", label = "Receipts (kr)") %>%
dyLegend(show="always", hideOnMouseOut =FALSE) %>% dyRangeSelector()
图例中的所有日期都比 xts 对象中的相应日期早一天。这显示在随附的屏幕截图中,其中第一个数据点是 1789-04-14,但在图例中的 RStudio 查看器中显示为“Apr, 13, 1789”(我一直无法找到摆脱月份缩写后不需要的逗号。)
奇怪的是,当我将此图表保存为 html 时,网页上的图例显示正确的日期!
我尝试了多种可能的解决方案,但到目前为止都没有奏效。这看起来像一个错误,但我不清楚错误在哪里(在 dygraphs 包中?在 RStudio 中?在 xts 中?)。我的问题似乎与此类似:
Date bug in dygraph in dygraphs package (using JavaScript) in R
但这个问题似乎从来没有明确的答案。我可以获得正确日期以显示在 RStudio 查看器的图例中的唯一方法是在用作 xts 对象索引的所有日期(使用 lubridate)中添加一天,但是日期在html.
**** 于 2017 年 7 月 10 日编辑以回应 Dirk 的回复 ****
我已经意识到日期的“隐藏”时区问题的可能性,并尝试了许多其他方法来解决这个问题,尽管尚未按照 Dirk 的建议使用 Sys.setenv() 设置时区。我刚刚试过,它也不能解决问题。这次我的步骤是:
operas$Date <- as.character(operas$Date)
Sys.setenv(tz="UTC")
receipts.xts <- xts(operas$Receipts, as.Date(operas$Date))
colnames(receipts.xts) <- "kr"
(在原始数据框中,日期已经是 date 类型,但我想从头开始展示这个问题。)dygraphs 代码与我原来的示例相同。
结果相同:在 RStudio 查看器中查看时,图例中的日期提前了一天,但在浏览器中查看时,导出的 html 中的日期是正确的。
所以看起来问题可能出在其他地方。
在我的原始示例中使用lubridate 的as_date() 仅反映了我最近尝试修复的一种情况。我的原始代码使用了 as.Date()。不过谢谢指点。
**** 一些示例数据 ****
> dput(receipts.test)
structure(list(Date = c("1789-04-14", "1789-04-20", "1789-04-22",
"1789-04-24", "1789-04-26", "1789-04-28", "1789-04-30", "1789-05-02",
"1789-05-04", "1789-05-06"), Receipts = c(15454L, 6985L, 4545L,
5342L, 5791L, 25139L, 6897L, 4268L, 2400L, 4515L)), .Names = c("Date",
"Receipts"), row.names = c(NA, 10L), class = c("tbl_df", "tbl",
"data.frame"))
【问题讨论】:
-
请使用
dput提供您的数据样本,并在How to make a great R reproducible example? 中查看其他建议。