如何将 pyplot 函数附加到图形实例?
Posted
技术标签:
【中文标题】如何将 pyplot 函数附加到图形实例?【英文标题】:How can I attach a pyplot function to a figure instance? 【发布时间】:2012-12-24 15:09:01 【问题描述】:以前,我遇到了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 函数可以在 fig1 中渲染,但有时也可以在其他并行生成的图中渲染。这很烦人。有没有办法将轮廓pyplot函数附加到fig1?
【问题讨论】:
【参考方案1】:您可以创建一个子图,然后调用该子图的contour
方法:
fig1 = figure(figsize=(4, 4), facecolor='white')
ax = fig1.add_subplot(111)
ax.contour(X, Y, Z)
plt.subplots
可以方便地通过一次调用创建图形和子图:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
【讨论】:
这是一个完美的答案:就像一个魅力,只需要我添加三个标志“斧头”。到我的代码库。非常感谢! 谢谢。如果它是“完美的”,你可以考虑给它投票;-)。 感谢您的回答,非常有用。【参考方案2】:作为对这里发生的事情的一点解释,matplotlib
有两个半独立的接口;状态机和OO接口。
状态机代码设计用于在交互式外壳中工作(并模仿 matlab 的界面)。它通过将 OO 接口包装在一组命令中来实现这一点,这些命令跟踪当前的 figure
和 axes
是什么。当您使用来自matplotlib.pyplot
的命令(我怀疑您的代码中有from matploblib.pyplot import *
)时,或多或少等同于执行gcf().gca().contour(...)
。当您创建一个新图形时,它会自动成为当前图形(如果您在迭代 shell 中使用它,这就是您想要的),因此您看到的行为是“正确的”行为。状态机界面也有代码,以确保在需要时重新绘制图形,管理 gui 事件循环等(您需要做的所有事情才能使交互界面顺利运行)。正如 hayden 在 cmets 中提到的,运行 ipython --pylab
会自动运行 from matplotlib.pyplot import *
,这为您提供了一个非常漂亮的交互式 shell。
OO 接口设计用于以编程方式处理matplotlib
。它增加了冗长的内容(您现在必须完成状态机的大部分工作),它弥补了清晰度。在 OO 模型中,大多数(可能全部)绘图函数与 Axes
对象 (doc) 相关联(因为可以有多个轴与图形相关联(例如 subplots 使用 gridspec
)。
解决问题的另一种方法是
ax = fig1.gca()
它将从fig1
中获取当前坐标轴,并在必要时创建一个坐标轴。如果您跟踪您的图形对象,而不是您的轴对象,并且想要向图形添加另一个图形,这可能会有所帮助。
【讨论】:
谢谢你,这帮助我理解了这个问题! 值得注意的是运行ipython --pylab
包括from matploblib.pyplot import *
以上是关于如何将 pyplot 函数附加到图形实例?的主要内容,如果未能解决你的问题,请参考以下文章
Amazon EMR:将 EBS 卷附加到实例时如何确保使用该卷
将每个 seaborn 图形附加到 for 循环内的 PDF