import networkx as nx
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties

# 设置字体
font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=14)  # 这里使用了宋体,你可以根据需要更改字体路径和名称

# 创建一个空的有向图
G = nx.DiGraph()

# 添加节点和边
G.add_edge('Python', '语法')
G.add_edge('Python', '库')
G.add_edge('语法', '变量')
G.add_edge('语法', '循环')
G.add_edge('语法', '条件')
G.add_edge('库', 'NumPy')
G.add_edge('库', 'Pandas')
G.add_edge('库', 'Matplotlib')

# 绘制图形
pos = nx.spring_layout(G)
ax = plt.gca()
nx.draw(G, pos, node_color='skyblue', edge_color='gray', node_size=1500, alpha=0.7, ax=ax)

# 绘制标签
for node, (x, y) in pos.items():
    plt.text(x, y, node, fontsize=14, ha='center', va='center', fontproperties=font)

# 显示图形
plt.show()


这个修改后的代码与之前的代码有以下几点不同:

  1. 设置字体:在新的代码中,我使用 FontProperties 来设置字体,以解决字符缺失的问题。
font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=14)
  1. 绘制标签:在新的代码中,我使用 plt.text 函数来绘制每个节点的标签,并在其中设置了字体属性。这是一个新添加的步骤,用于解决 _AxesStack 对象不可调用的问题。
for node, (x, y) in pos.items():
    plt.text(x, y, node, fontsize=14, ha='center', va='center', fontproperties=font)

这些修改使得代码能够正确地显示中文字符,并避免了 _AxesStack 对象不可调用的错误。希望这个解释能帮助你理解这个代码的不同之处。如果你还有其他问题,欢迎随时向我提问。我很乐意帮助你!


修改前

import networkx as nx
import matplotlib.pyplot as plt

# 创建一个空的有向图
G = nx.DiGraph()

# 添加节点和边
G.add_edge('Python', '语法')
G.add_edge('Python', '库')
G.add_edge('语法', '变量')
G.add_edge('语法', '循环')
G.add_edge('语法', '条件')
G.add_edge('库', 'NumPy')
G.add_edge('库', 'Pandas')
G.add_edge('库', 'Matplotlib')

# 绘制图形
pos = nx.spring_layout(G)
ax = plt.gca()
nx.draw(G, pos, with_labels=True, node_color='skyblue', edge_color='gray', node_size=1500, alpha=0.7, ax=ax)

# 显示图形
plt.show()