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

如何在ggplot(ggraph)中正常显示乌尔都语节点文本?

解决ggraph中乌尔都语节点文本无法正常显示的问题

在使用ggraph可视化乌尔都语词网络时,节点文本无法正常显示乌尔都语内容。原始代码如下:

title_word_pairs %>%
  filter(n >= 100) %>%
  graph_from_data_frame() %>%
  ggraph(layout = "fr") +
  geom_edge_link(aes(edge_alpha = n, edge_width = n), edge_colour = "cyan4") +
  geom_node_point(size = 3) +
  geom_node_text(aes(label = name), repel = TRUE, 
                 point.padding = unit(0.2, "lines")) +
  theme_void()

尝试使用DisplayArabic包的displayArabic函数后问题仍未解决,修改后的代码:

title_word_pairs %>%
  filter(n >= 100) %>%
  graph_from_data_frame() %>%
  ggraph(layout = "fr") +
  geom_edge_link(aes(edge_alpha = n, edge_width = n), edge_colour = "cyan4") +
  geom_node_point(size = 3) +
  geom_node_text(aes(label = displayArabic(toString(name))), repel = TRUE, 
                 point.padding = unit(0.2, "lines")) +
  theme_void()

可行解决方案

乌尔都语无法正常显示的核心问题通常是字体支持不足或文本方向(从右到左)未正确设置,以下是具体修复步骤:

  • 步骤1:安装并指定支持乌尔都语的字体
    确保系统安装了支持乌尔都语的字体(如Noto Nastaliq Urdu、Urdu Naskh Asiatype或Jameel Noori Nastaleeq),然后在geom_node_text中通过family参数指定该字体:

    title_word_pairs %>%
      filter(n >= 100) %>%
      graph_from_data_frame() %>%
      ggraph(layout = "fr") +
      geom_edge_link(aes(edge_alpha = n, edge_width = n), edge_colour = "cyan4") +
      geom_node_point(size = 3) +
      geom_node_text(aes(label = name), repel = TRUE, 
                     point.padding = unit(0.2, "lines"),
                     family = "Noto Nastaliq Urdu") + # 替换为你的乌尔都语字体名称
      theme_void()
    
  • 步骤2:处理从右到左文本方向
    乌尔都语是从右到左书写的语言,可使用bidi包调整文本方向:

    # 先安装并加载bidi包
    install.packages("bidi")
    library(bidi)
    
    title_word_pairs %>%
      filter(n >= 100) %>%
      graph_from_data_frame() %>%
      ggraph(layout = "fr") +
      geom_edge_link(aes(edge_alpha = n, edge_width = n), edge_colour = "cyan4") +
      geom_node_point(size = 3) +
      geom_node_text(aes(label = bidi::bidi(name)), repel = TRUE, 
                     point.padding = unit(0.2, "lines"),
                     family = "Noto Nastaliq Urdu") +
      theme_void()
    
  • 步骤3:验证字体是否被R识别
    如果不确定字体名称,可使用以下命令列出系统中所有可用字体:

    library(extrafont)
    fonttable() %>% select(FontName, FamilyName)
    

    找到对应乌尔都语字体的FamilyName,替换到代码中即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 02:25:29