Python 创建和引用单独的matplotlib绘图
使用matplotlib创建多个单独绘图的最佳实践是什么,以便稍后调用或输出到pdf报告中?我有点不清楚如何在内存中保留每个绘图(就像我们可以使用数据帧)以供以后参考 假设我们有以下代码:Python 创建和引用单独的matplotlib绘图,python,matplotlib,plot,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 其目的是创建(x1,y1)和(x2,y2)的两个
%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
其目的是创建(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()
这在技术上是可行的,但我不确定以后如何参考这些。此外,我在这里用一个小例子来说明,但实际上我可能有更多的例子 如果您开始使用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')
使用问题使用的隐式样式(地物对象未保存在变量中,且打印命令应用于当前地物),可以轻松地将上一个地物设置为当前地物:
plt.figure(1)
因此将重新激活图1<然后可以使用code>plt.savefig(),可以在其中绘制其他绘图,等等
此外,您还可以在创建图形时为其命名,然后引用:
plt.figure("growth", figsize=…)
…
plt.figure("counts", figsize=…)
…
plt.figure("growth") # This figure becomes the active one again
(地物参考参数称为
num
,但它不必是数字和,这样代码就更清晰了)。不完全在现场,但几乎是重复的。看见您可能想要pyplot
。但是您仍然可以使用pylab
,然后调用plt.figure(N),再次选择您的N
-第个图形并在其上绘图。谢谢,我实际上在导入中使用了pylot。我必须包含%pylab内联位,因为否则,在使用诸如fig,ax=plt.subplot()之类的内容时,图片不会显示出来;ax.绘图([1,2,3]),图show()
。您可以在轴ax
上绘制代码中所需的任意多个位置,并且只能在结束调用fig.show()
中绘制。对于许多图,您可能会看到fig1,ax1
,您可能会对最后一行的目的感到有点困惑:在您的示例中,plt.show()?无论我是否包含该行,都会显示这2个子图是的,因为这里有%pylab inline
行,所以不需要plt.show
行。如果您在非交互式环境中工作,则需要显示绘图