我想在python脚本中创建两个独立的matplotlib图,并且在我添加行,注释等时可能会在它们之间来回跳动(例如),也许我调用一个函数,该函数将行添加到两个图上,然后添加注释的另一个函数)。
我希望通过解决matplotlib的示例,我可以找出一些有效的解决方案,但是我想知道哪种偏爱和最清洁的方法是什么。我倾向于感到困惑,何时应该做
之类的事情fig,ax=plt.subplots()
当我应该做以下事情时:
fig=plt.figure()
此外,我应该如何在图之间来回切换。如果我做了
之类的事情fig1,ax1=plt.subplots()
fig2,ax2=plt.subplots()
我可以通过执行以下操作来参考这些图:
ax1.plt.plot([some stuff])
ax2.plt.plot([otherstuff]
?我之所
plt.plot([stuff])
据推测,他们没有指定AX1或AX2,因为示例中只有一个图。最后,我想保存两个图以使用
之类的东西提交。plt.savefig(....)
尽管我再次需要能够独立参考这两个图。那么,实施此操作的适当是什么?
如果您想能够编写明确应用命令到不同轴的代码,则要使用面向对象的接口。
实际上,您的前两个示例中的两个都使用此接口。区别在于plt.subplots()
将同时创建一个图对象和轴网格,而plt.figure()
只是创建图形。
图对象具有在其中创建轴的方法。因此,这两个代码块是等效的:
fig, ax = plt.subplots()
和
fig = plt.figure()
ax = fig.add_subplot(111)
通常,只有当您想要不遵循常规网格的图中的多个轴时,后一种方法才会更有用。因此,您可以做:
fig = plt.figure()
ax = fig.add_axes([.1, .1, .2, .8])
将在图的左侧添加一个高轴对象。
接下来,如何获得多个轴绘制?
subplots
函数采用两个位置参数,指定网格中的行和列数(默认为 (1, 1)
。
fig, axes = plt.subplots(1, 2)
现在axes
将成为一个填充轴对象的(1, 2)
对象数组。对于小网格来说,使用Python的元组拆开并直接引用对象通常更方便:
fig, (ax1, ax2) = plt.subplots(1, 2)
现在,您如何处理这些对象,它们与MATLAB风格的过程之间的关系是什么?
pyplot
名称空间中的大多数功能也作为图或轴对象上的方法存在。Matplotlib(和Matlab)具有"电流"图和轴的概念。当您调用像plt.plot
这样的函数时,它会在当前轴上绘制(通常是最近创建的轴)。当您调用plt.savefig
之类的函数时,它保存了当前图。
对于简单的任务,这比使用面向对象的接口更为直接,通常更容易。但是,当您开始制作更复杂的地块时,例如一个轴网格,每个网格都有多层(也许是散点图和回归线),能够围绕您在做什么做具有很大的优势。通常,绘制以对象为导向方式编写的代码将比以过程方式编写的代码更好。