创建和引用单独的matplotlib图

时间:2016-03-10 17:59:26

标签: python matplotlib plot

使用matplotlib创建多个单独的绘图的最佳做法是什么,因此可以稍后调用它们或输出到pdf报告中?我有点不清楚如何以一种方式保留内存中的每个绘图(就像我们可以使用数据帧)以供以后参考。

假设我们有这段代码:

%pylab inline
x1 = np.random.randn(50)*100
y1 = np.random.randn(50)*100
x2 = np.random.randn(50)*100
y2 = np.random.randn(50)*100

目的是创建2个单独的(x1,y1)和(x2,y2)图,并以某种方式“保存”它们以便稍后引用。目的是能够将这些输出到PDF(可能通过reportlab)。 “数字”,“次要情节”和“轴”之间的关系令我感到困惑,并且不确定什么是最佳目的​​。我开始采用以下方法:

plt.figure(1, figsize=(8, 6))
plt.subplot(211)
plt.scatter(x1, y1, c = 'r', alpha = 0.3)

plt.subplot(212)
plt.scatter(x2, y2, c = 'k', alpha = 0.7)
plt.show()

技术上有效,但我不确定以后如何引用它们。另外,我在这里用一个小例子来说明,但在实践中我可能会有更多这些。

2 个答案:

答案 0 :(得分:0)

如果你开始使用matplotlib的面向对象接口,事情会更有意义。在这种情况下,您可以执行以下操作:

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(8, 6))
ax1 = fig.add_subplot(211)
ax1.scatter(x1, y1, c = 'r', alpha = 0.3)

ax2 = fig.add_subplot(212)
ax2.scatter(x2, y2, c = 'k', alpha = 0.7)

plt.show()

通过这种方式,很容易看到ax1ax2属于图形实例fig。然后,您可以稍后返回ax1ax2,在其上绘制更多数据,或调整轴限制,或添加标签等等。

您还可以使用自己的一组子图添加另一个图:

fig2 = plt.figure(figsize=(8, 6))
ax3 = fig2.add_subplot(211)

然后你可以随时保存给定的数字,并且知道你总是指的是正确的数字:

fig.savefig('figure1.png')
fig2.savefig('figure2.png')

答案 1 :(得分:0)

使用问题使用的隐式样式(图形对象保存在变量中,并且绘图命令应用于当前图形的位置),您可以轻松地将前一个数字设为当前图形图:

plt.figure(1)

因此将重新激活图1.然后可以使用plt.savefig(),可以在其中制作其他图表等。

此外,您还可以在创建图形时为其指定名称,然后引用它:

plt.figure("growth", figsize=…)
…
plt.figure("counts", figsize=…)
…
plt.figure("growth")  # This figure becomes the active one again

(图形参考参数称为num,但它不必是数字和can be a string,这样可以获得更清晰的代码。)