gpt4 book ai didi

python - 如何将 pyplot 函数附加到图形实例?

转载 作者:太空狗 更新时间:2023-10-29 17:53:15 26 4
gpt4 key购买 nike

以前,我对 interference between multiple Matplotlib figures 有问题.最后我发现了一个问题,即一些 pyplot 函数没有附加到它们的图形实例,但可以在其他一些并行创建的图形实例中呈现。

下面是一些示例代码:

from django.http import HttpResponse
from numpy import arange, meshgrid
from matplotlib.mlab import bivariate_normal

def show_chart(request):
delta = 0.025
x = arange(-3.0, 3.0, delta)
y = arange(-2.0, 2.0, delta)
X, Y = meshgrid(x, y)
Z1 = bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
Z = 10.0 * (Z2 - Z1)

from matplotlib.pyplot import figure, contour
fig1 = figure(figsize=(4, 4), facecolor='white')
contour(X, Y, Z)

response = HttpResponse(content_type='image/png')
fig1.savefig(response, format='png')
fig1.clear()
return response

上面示例中的等高线 pyplot 函数可以在图 1 中呈现,但偶尔也会在其他一些并行生成的图中呈现。这很烦人。有没有办法将等高线 pyplot 函数附加到 fig1?

最佳答案

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

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

OO 接口(interface)专为以编程方式处理 matplotlib 而设计。它增加了冗长(您现在必须完成状态机的大部分工作),但在清晰度上得到了弥补。在 OO 模型中,大多数(可能是全部)绘图函数都与 Axes 对象 ( doc ) 相关联(因为可以有多个轴与图形相关联(例如 subplots 使用gridspec).

另一种解决问题的方法是

ax = fig1.gca()

这将从 fig1 获取当前轴,必要时创建一个。如果您跟踪图形对象而不是轴对象并且想要向图形添加另一个图形,这可能会有所帮助。

关于python - 如何将 pyplot 函数附加到图形实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14254379/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com