candlestick: fixed timestamps issues

This commit is contained in:
pvictor 2020-12-16 14:12:57 +01:00
parent 898ff0f729
commit 9a56de4d4e
4 changed files with 11 additions and 11 deletions

View File

@ -113,7 +113,7 @@ apex <- function(data, mapping, type = "column", ...,
# Construct series # Construct series
make_series <- function(mapdata, mapping, type = NULL, serie_name = NULL) { make_series <- function(mapdata, mapping, type = NULL, serie_name = NULL, force_datetime_names = FALSE) {
if (identical(type, "candlestick")) { if (identical(type, "candlestick")) {
if (!all(c("x", "open", "high", "low", "close") %in% names(mapping))) if (!all(c("x", "open", "high", "low", "close") %in% names(mapping)))
stop("For candlestick charts 'x', 'open', 'high', 'low', and 'close' aesthetics must be provided.", call. = FALSE) stop("For candlestick charts 'x', 'open', 'high', 'low', and 'close' aesthetics must be provided.", call. = FALSE)
@ -141,7 +141,7 @@ make_series <- function(mapdata, mapping, type = NULL, serie_name = NULL) {
mapdata$x[is.na(mapdata$x)] <- "NA" mapdata$x[is.na(mapdata$x)] <- "NA"
x_order <- unique(mapdata$x) x_order <- unique(mapdata$x)
if (is_x_datetime(mapdata)) { if (is_x_datetime(mapdata)) {
add_names <- c("x", "y") add_names <- force_datetime_names
x_order <- sort(x_order) x_order <- sort(x_order)
} else { } else {
add_names <- names(mapping) add_names <- names(mapping)

View File

@ -40,7 +40,7 @@ add_line <- function(ax,
mapdata <- lapply(mapping, rlang::eval_tidy, data = data) mapdata <- lapply(mapping, rlang::eval_tidy, data = data)
ax$x$ax_opts$series <- c( ax$x$ax_opts$series <- c(
ax$x$ax_opts$series, ax$x$ax_opts$series,
make_series(mapdata, mapping, type, serie_name) make_series(mapdata, mapping, type, serie_name, force_datetime_names = c("x", "y"))
) )
if (identical(apex_type, "scatter")) { if (identical(apex_type, "scatter")) {
if (is.null(ax$x$ax_opts$markers$size)) { if (is.null(ax$x$ax_opts$markers$size)) {

View File

@ -31,12 +31,11 @@ parse_df <- function(data, add_names = FALSE) {
X = data[], X = data[],
FUN = function(x) { FUN = function(x) {
if (inherits(x, "Date")) { if (inherits(x, "Date")) {
# as.numeric(x) * 86400000 # js_date(x)
# format(x) as.numeric(x) * 1000 * 60*60*24
js_date(x)
} else if (inherits(x, "POSIXt")) { } else if (inherits(x, "POSIXt")) {
# as.numeric(x) * 1000 # js_date(x)
js_date(x) as.numeric(x) * 1000
} else if (inherits(x, "factor")) { } else if (inherits(x, "factor")) {
as.character(x) as.character(x)
} else { } else {
@ -119,7 +118,8 @@ parse_candlestick_data <- function(.list) {
FUN = function(i) { FUN = function(i) {
val <- lapply(.list, `[[`, i) val <- lapply(.list, `[[`, i)
list( list(
x = js_date(val$x)[[1]], # x = js_date(val$x)[[1]],
x = as.numeric(val$x) * 1000,
y = c(val$open, val$high, val$low, val$close) y = c(val$open, val$high, val$low, val$close)
) )
} }

View File

@ -44,11 +44,11 @@ test_that("parse_df works with Date/POSIXt", {
) )
res <- parse_df(x, add_names = TRUE) res <- parse_df(x, add_names = TRUE)
expect_is(res[[1]]$date, "JS_EVAL") expect_is(res[[1]]$date, "numeric")
expect_is(res[[1]]$datetime, "numeric") expect_is(res[[1]]$datetime, "numeric")
res <- parse_df(x, add_names = FALSE) res <- parse_df(x, add_names = FALSE)
expect_is(res[[1]][[1]], "JS_EVAL") expect_is(res[[1]][[1]], "numeric")
expect_is(res[[1]][[2]], "numeric") expect_is(res[[1]][[2]], "numeric")
}) })