使用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()
技术上有效,但我不确定以后如何引用它们。另外,我在这里用一个小例子来说明,但在实践中我可能会有更多这些。
答案 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()
通过这种方式,很容易看到ax1
和ax2
属于图形实例fig
。然后,您可以稍后返回ax1
和ax2
,在其上绘制更多数据,或调整轴限制,或添加标签等等。
您还可以使用自己的一组子图添加另一个图:
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,这样可以获得更清晰的代码。)