如何在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
相关产品推荐
相关产品推荐

