在Quarto中通过ojs_define传递R日期至ojs并识别为日期类型的方法
解决Quarto中R日期传递到OJS的类型识别问题
当用ojs_define把R的日期数据传给OJS时,Date类型会被转成字符串,导致Plot图表的日期轴显示异常。有两种实用方法可以解决:
方法1:在R端把日期转为POSIXct类型
OJS会自动识别POSIXct格式的日期为JavaScript原生Date对象,直接在R里转换日期列即可:
library(tidyverse) df <- data.frame(day = seq.Date(from = as.Date('2023-01-01'), to = as.Date('2023-06-15'), by = 'days')) %>% mutate( values = rnorm(mean = 10, sd = 2, n = n()), day = as.POSIXct(day) # 把Date转成POSIXct ) ojs_define(plot_data = df)
OJS代码不需要修改,原有的Plot代码会正确识别日期类型,自动渲染合适的日期轴。
方法2:在OJS端手动转换日期
如果不想改动R的数据处理逻辑,直接在OJS里把字符串转成Date对象,或者在Plot配置里指定x轴类型:
方式2a:提前转换所有日期数据
# 将plot_data中的day字符串转为Date对象 const processedData = plot_data.map(item => ({ ...item, day: new Date(item.day) })) Chart = Plot.plot({ marks: [ Plot.line(processedData, {x: "day", y: "values"}, { stroke: "black" } ) ] })
方式2b:在Plot中直接指定x轴类型
Chart = Plot.plot({ marks: [ Plot.line(transpose(plot_data), {x: {value: "day", type: "date"}, y: "values"}, # 指定x为日期类型 { stroke: "black" } ) ] })
两种方法都能让OJS正确识别日期,解决图表格式异常的问题。
内容的提问来源于stack exchange,提问作者kjellhaakon
相关产品推荐
相关产品推荐

