Plotly时间序列可视化:丹麦日期标签与滑块步长调整问题
解决方案
1. 替换为丹麦语月份标签
R中日期的月份缩写由系统区域设置控制,可临时切换到丹麦语区域,让filter_slider显示丹麦语月份缩写。注意不同操作系统的区域名称有差异:
- Windows系统:使用
"Danish_Denmark.1252" - Linux/macOS系统:使用
"da_DK.UTF-8"
2. 设置滑块步长为1个月
在filter_slider中添加step = "1 month"参数,强制滑块每次移动间隔为1个月,避免单日拖动的连续状态。
修改后的完整代码
library(plotly) library(crosstalk) library(dplyr) # 设置丹麦语区域(根据操作系统二选一) # Windows系统启用该行,注释下方macOS/Linux行 # Sys.setlocale("LC_TIME", "Danish_Denmark.1252") # macOS/Linux系统启用该行,注释上方Windows行 Sys.setlocale("LC_TIME", "da_DK.UTF-8") df <- data.frame( value = runif(18, min = -1, max = 1), time = rep(c('2021-05-01', '2021-06-01', '2021-07-01', '2021-08-01', '2021-09-01', '2021-10-01'), 3) %>% as.Date(), group = rep(c(1, 2, 3), each = 3) %>% factor() ) sd <- highlight_key(df) widgets <- bscols( filter_slider('ti', 'Tid', sd, ~time, timeFormat = '%y-%b', step = "1 month") ) plot <- plot_ly( sd, x = ~time, y = ~value, mode = 'lines+markers', type = 'scatter', color = ~group) bscols(widgets, plot) # 可选:运行完后恢复系统默认区域 # Sys.setlocale("LC_TIME", "")
补充说明
- 如果设置区域后丹麦语月份仍不生效,可手动创建月份映射替换缩写:
但这种方式需要覆盖所有月份的丹麦语缩写,不如设置区域简便。df <- df %>% mutate(month_dk = case_when( format(time, "%b") == "May" ~ "Maj", format(time, "%b") == "Oct" ~ "Okt", format(time, "%b") == "Jun" ~ "Jun", format(time, "%b") == "Jul" ~ "Jul", format(time, "%b") == "Aug" ~ "Aug", format(time, "%b") == "Sep" ~ "Sep", TRUE ~ format(time, "%b") )) step = "1 month"会限制滑块仅停在各月起始日期,完全匹配月度数据的使用场景。
内容的提问来源于stack exchange,提问作者EmilA
相关产品推荐
相关产品推荐

