Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 创建和引用单独的matplotlib绘图_Python_Matplotlib_Plot - Fatal编程技术网

Python 创建和引用单独的matplotlib绘图

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)的两个

使用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)的两个单独的图,并以某种方式“保存”它们以供以后参考。其目的是能够将这些数据输出到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
行。如果您在非交互式环境中工作,则需要显示绘图