Matplotlib 子图坐标轴

1 投票
1 回答
1498 浏览
提问于 2025-04-17 18:02

任何帮助都非常感谢。我正在尝试使用matplotlib制作子图,我写的代码如下:

import networkx as nx

Fig, Axes = plt.subplots(nrows=1, ncols=2)
plt.tight_layout()
for i in range(0, NoOfVehicles):
  Axes[i].set_aspect(1)
  Axes[i].xaxis.set_major_formatter(mtick.NullFormatter())
  Axes[i].yaxis.set_major_formatter(mtick.NullFormatter()

现在我想在第一个图中绘制一些东西,然后在第二个图中绘制其他东西。

我想在第一个图中做

nx.drawing.nx_pylab.draw_networkx_nodes(GPlot[0].G, GPlot[0].Position, node_size=100, node_color=GPlot[0].Color)

而在第二个图中做

nx.drawing.nx_pylab.draw_networkx_nodes(GPlot[1].G, GPlot[1].Position, node_size=100, node_color=GPlot[1].Color)

总的来说,我想要的是:我希望第一组节点出现在subplot(1,2,1)中,第二组出现在subplot(1,2,2)中。但是现在它们都出现在同一个图(1,2,2)里。

GPlot只是一个列表,里面包含了两个GraphPlot类的对象。

class GraphForPlot:
    def __init__(self):
        self.G = nx.Graph()
        self.Components = []
        self.ActiveStatus = {}
        self.Nodes = []
        self.Position = {}
        self.Color = []

1 个回答

1

你需要告诉 networkx 要把图画在哪个坐标轴上,如果不告诉它,它会默认画在当前活动的坐标轴上(也就是 plt.gca() 返回的那个坐标轴,具体可以参考文档)。

nx.drawing.nx_pylab.draw_networkx_nodes(..., ax=Axes[0])
nx.drawing.nx_pylab.draw_networkx_nodes(..., ax=Axes[1])

顺便提一下,实例变量的命名不要用驼峰式命名(pep8),这样可能会和类名发生冲突(比如这里的 matplotlib.axes.Axes)。

撰写回答