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

Shiny ggplot中Unicode形状本地正常,Docker与shinyapps.io显示异常

解决Shiny应用部署后Unicode Emoji无法显示的问题

核心原因

  1. geom_point的shape参数不支持复杂Emoji:ggplot2的shape仅支持有限的单字节/双字节符号(对应pch编号),多字节Emoji必须用geom_text的label参数实现。
  2. 部署环境缺少Emoji支持字体:shinyapps.io和rocker镜像默认未安装支持彩色Emoji的字体。

方案1:Docker容器环境配置

修改Dockerfile安装Emoji字体

在系统依赖安装步骤中添加支持Emoji的字体包:

FROM rocker/shiny-verse:4.1.2

RUN apt-get update && apt-get install -y \
    libcurl4-gnutls-dev \
    libssl-dev \
    fonts-noto-color-emoji  # 新增安装Noto彩色Emoji字体

RUN apt-get install -y locales locales-all
ENV LC_ALL en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US.UTF-8

RUN R -e 'install.packages(c(\
"https://cran.r-project.org/src/contrib/Archive/ggplot2/ggplot2_3.3.5.tar.gz",\
"https://cran.r-project.org/src/contrib/tidyr_1.2.1.tar.gz",\
"https://cran.r-project.org/src/contrib/Archive/shiny/shiny_1.7.3.tar.gz"),\
          repos=NULL,type="source")'

COPY . /app

CMD ["R", "-e", "shiny::runApp('/app', host = '0.0.0.0', port = 4849)"]

修改app.R中的绘图代码

替换geom_point为geom_text并指定安装的字体:

output$plot<-renderPlot({
  df%>%
    ggplot()+
    geom_text(aes(x=x,y=y), label="\U0001F37C", size=20,
              family = "Noto Color Emoji")
})

方案2:shinyapps.io环境配置

使用showtext包加载支持Emoji的字体,无需依赖系统字体:

修改app.R代码

library(shiny)
library(tidyr)
library(ggplot2)
library(showtext)

# 自动启用showtext渲染
showtext_auto()
# 从Google Fonts加载Noto Emoji字体
font_add_google("Noto Color Emoji", "noto_emoji")

ui<-fluidPage(plotOutput("plot"),
              plotOutput("plot2"))

server <- function(input, output, session) {
  df<-data.frame(x=0:10,
                 y=0:10)
  
  output$plot<-renderPlot({
    df%>%
      ggplot()+
      geom_text(aes(x=x,y=y), label="\U0001F37C", size=20,
                family = "noto_emoji")
  })
  
  output$plot2<-renderPlot({
    df%>%
      ggplot()+
      geom_point(aes(x=x,y=y),shape=18,size=20)
  })
}

shinyApp(ui, server)

验证字体是否可用

可以在R中运行以下代码查看系统已安装字体,确保指定的字体名称正确:

systemfonts::system_fonts()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:25:53