You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Matplotlib与NetworkX中显示非英文字体?

解决NetworkX中波斯语(阿拉伯字母)标签显示空白的问题

我来帮你搞定这个波斯语标签显示的问题!出现空白方块的核心原因是Matplotlib默认不支持阿拉伯/波斯语的从右到左排版和字母连字特性,咱们用两个工具库就能完美解决。

第一步:安装必要依赖

先把处理文本和绘图需要的库装上,在终端运行:

pip install arabic-reshaper python-bidi matplotlib networkx

第二步:完整可运行代码

下面是调整后的代码,我会标注关键步骤:

from bidi.algorithm import get_display
import matplotlib.pyplot as plt
import arabic_reshaper
import networkx as nx

# 准备你的波斯语节点标签
nodes = ["سلام", "دنیا", "پایتون", "نتورک ایکس"]
G = nx.Graph()
G.add_nodes_from(nodes)

# 定义文本处理函数:先处理字母连字,再调整排版方向
def fix_persian_text(text):
    # 重塑文本,让波斯语字母正确连写(解决字母分散的问题)
    reshaped_text = arabic_reshaper.reshape(text)
    # 调整为从右到左的显示顺序(符合波斯语阅读习惯)
    return get_display(reshaped_text)

# 把所有节点标签替换成处理后的文本
processed_labels = {node: fix_persian_text(node) for node in G.nodes()}

# 绘制网络图
pos = nx.spring_layout(G)
plt.figure(figsize=(8, 6))

# 绘制节点、边和处理后的标签
nx.draw_networkx_nodes(G, pos, node_size=2000, node_color="#4CAF50")
nx.draw_networkx_edges(G, pos, width=2)
# 这里要指定支持波斯语的字体,比如IRANSans、Vazirmatn(确保系统已安装)
nx.draw_networkx_labels(G, pos, labels=processed_labels, font_size=14, font_family="IRANSans")

plt.axis("off")
plt.show()

关键注意事项

  • 字体必须到位:系统里得安装支持波斯语的字体,比如IRANSans、Vazirmatn。如果没装,先下载安装,然后把font_family改成对应的字体名称。
  • 处理顺序不能乱:一定要先调用arabic_reshaper.reshape处理连字,再用get_display调整方向,反过来会导致排版完全错乱。
  • Jupyter环境适配:如果在Jupyter Notebook里运行,记得开头加上%matplotlib inline,不然图形可能显示不出来。

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

火山引擎 最新活动