Python 如何将pyplot函数附加到地物实例?

Python 如何将pyplot函数附加到地物实例?,python,numpy,matplotlib,Python,Numpy,Matplotlib,在此之前,我有一个问题。最后,我发现了一个问题,一些pyplot函数不附加到它们的figure实例,但可以在并行创建的其他figure实例中呈现 下面是一些示例代码: 从django.http导入HttpResponse 来自numpy import arange,meshgrid 从matplotlib.mlab导入双变量_normal def显示图表(请求): 增量=0.025 x=arange(-3.0,3.0,增量) y=arange(-2.0,2.0,增量) 十、 Y=网格网格(X,Y

在此之前,我有一个问题。最后,我发现了一个问题,一些pyplot函数不附加到它们的figure实例,但可以在并行创建的其他figure实例中呈现

下面是一些示例代码:

从django.http导入HttpResponse
来自numpy import arange,meshgrid
从matplotlib.mlab导入双变量_normal
def显示图表(请求):
增量=0.025
x=arange(-3.0,3.0,增量)
y=arange(-2.0,2.0,增量)
十、 Y=网格网格(X,Y)
Z1=二元_正态(X,Y,1.0,1.0,0.0,0.0)
Z2=二元_正态(X,Y,1.5,0.5,1,1)
Z=10.0*(Z2-Z1)
从matplotlib.pyplot导入图形,轮廓
图1=图(图大小=(4,4),面颜色=(白色)
轮廓(X、Y、Z)
response=HttpResponse(content\u type='image/png')
图1.savefig(响应,格式='png')
图1.clear()
返回响应

上述示例中的等高线pyplot函数可以在图1中渲染,但偶尔也可以在并行生成的其他图形中渲染。这很烦人。有没有办法将等高线pyplot函数附加到图1上?

您可以创建一个子图,然后调用子图的
等高线方法:

fig1 = figure(figsize=(4, 4), facecolor='white')
ax = fig1.add_subplot(111)
ax.contour(X, Y, Z)
通过一次调用可以方便地创建地物和子地块:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

作为对这里发生的事情的一点解释,
matplotlib
有两个半独立的接口;状态机和OO接口

状态机代码设计用于在交互式shell中工作(并模仿matlab的界面)。它通过将OO接口包装在一组命令中来实现这一点,这些命令跟踪当前的
图形
是什么。当您在中使用来自
matplotlib.pyplot
(我怀疑您的代码中有来自matploblib.pyplot import*
)的命令时,或多或少相当于执行
gcf().gca().contour(…)
。当您创建一个新图形时,它会自动变为当前图形(如果您在iTreactive shell中使用它,这就是您想要的),因此您看到的行为是“正确的”行为。状态机界面中还包含代码,以确保在需要时重新绘制图形、管理gui事件循环等(所有使交互界面顺利工作所需的操作)。正如海登在评论中提到的,运行
ipython--pylab
将自动从matplotlib.pyplot import*
运行
,这为您提供了一个非常好的交互式shell

OO接口设计用于编程处理
matplotlib
。它在冗长中添加的内容(您现在必须完成状态机的大部分工作),在清晰性方面弥补了它的不足。在OO模型中,大多数(可能全部)绘图功能都与
对象()相关联(因为一个图形可以有多个轴关联(例如使用
gridspec

解决问题的另一种方法是

ax = fig1.gca()

这将从
图1
中获取当前轴,必要时创建一个轴。如果您跟踪您的图形对象,而不是您的轴对象,并希望在图形中添加另一个图形,这可能会很有帮助。

这是一个完美的答案:效果非常好,只需要我在我的代码库中添加三个符号“ax”。非常感谢谢谢。如果它是“完美的”,你可以考虑投票赞成它。-谢谢你的回答,非常有用。谢谢你,这帮助了我对这个问题的理解。值得注意的是运行
ipython--pylab
包括来自matploblibliblib.pyplot导入的
*