You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Shiny Dashboard中固定ggplot标签语言并实现星期数据分类

解决Shiny Dashboard部署后图表标签变为中文乱码的问题

出现该问题的核心原因是:本地RStudio运行时继承了IDE的环境变量配置,但部署后的运行环境未成功读取你设置的语言参数,时间相关输出默认调用了系统中文locale。可按以下步骤修复:

  • 将语言配置代码放在Rmd文件YAML头之后的第一个代码块,优先级高于所有包加载、数据处理、绘图代码,避免依赖包先读取默认locale。
  • 补充单独的时间类locale配置,并兼容不同操作系统的参数格式,参考代码如下:
# 放在文件最开头的代码块
Sys.setenv("LANGUAGE" = "en_US.UTF-8")
if (.Platform$OS.type == "windows") {
  Sys.setlocale("LC_ALL", "English")
  Sys.setlocale("LC_TIME", "English")
} else {
  Sys.setlocale("LC_ALL", "en_US.UTF-8")
  Sys.setlocale("LC_TIME", "en_US.UTF-8")
}
  • 兜底方案:ggplot绘图时手动指定时间标签的格式,完全脱离系统locale影响,例如设置x轴日期标签为英文月份+日期:
ggplot(df, aes(x = date)) +
  geom_line(aes(y = value)) +
  # 手动指定英文格式标签,%b为英文月份缩写,%a为英文星期缩写
  scale_x_date(date_labels = "%b %d")
星期字段划分为工作日/周末两类

推荐使用不依赖系统locale的lubridate::wday()函数实现,判断逻辑更稳定:

library(dplyr)
library(lubridate)

df <- df %>%
  mutate(
    # wday返回数字:周日=1,周一=2...周六=7
    day_type = case_when(
      wday(date) %in% c(1, 7) ~ "周末",
      TRUE ~ "工作日"
    )
  )

如果你不想引入lubridate依赖,也可以基于已生成的Weekdays字段判断(需确保locale为英文设置生效):

df <- df %>%
  mutate(
    day_type = case_when(
      Weekdays %in% c("Saturday", "Sunday") ~ "周末",
      TRUE ~ "工作日"
    )
  )

内容的提问来源于stack exchange,提问作者Timi Lin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 17:24:08