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()
这个修改后的代码与之前的代码有以下几点不同:
- 设置字体:在新的代码中,我使用
FontProperties
来设置字体,以解决字符缺失的问题。
font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=14)
- 绘制标签:在新的代码中,我使用
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()