当前位置: 首页 > 知识库问答 >
问题:

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

宋康安
2023-03-14

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

下面是一些示例代码:

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

上面的例子中的等高线py图函数可以在图1中渲染,但偶尔也会在并行生成的其他图中渲染。那很烦人。有什么方法可以将等高线py图函数附加到图1吗?

共有2个答案

丁曦哲
2023-03-14

您可以创建一个子图并调用子图的quour方法:

fig1 = figure(figsize=(4, 4), facecolor='white')
ax = fig1.add_subplot(111)
ax.contour(X, Y, Z)

plt。子地块便于通过单个调用创建地物和子地块:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
沈建柏
2023-03-14

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

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

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

解决你问题的另一种方法是

ax = fig1.gca()

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

 类似资料:
  • 问题内容: 我正在尝试创建一个将条目添加到json文件的函数。最终,我想要一个看起来像 等。这就是我所拥有的: 这确实会创建一个条目,例如。但是,如果我再次使用此函数(使用不同的名称和网址),第一个函数将被覆盖。我需要怎么做才能将第二个(第三个…)条目附加到第一个? 编辑 :对此问题的第一个答案和评论已经指出了我在写块中未使用的明显事实。不过,我看不出该怎么做。例如,以下内容显然不会起作用: 问题

  • 我刚刚在Amazon RDS中创建了一个SQL Server Express实例,因为我想执行测试,但我需要添加一个扩展名为.mdf的示例数据库“AdventureWorksLT2012_Data”。 我可以通过MSSMS毫无问题地连接到数据库,但是当我试图连接我本地拥有的BD时,我做不到 我试图调查在AWS留档的方式附加这种类型的文件到我的BD实例,但我无法计算任何参考。 感谢您的回复。

  • 我试图做一个循环来添加10个项目,但是只添加一个数字为10的项目。 我做错了什么?

  • 问题内容: 我正在使用AJAX将数据附加到div元素,从JavaScript填充div,如何在不丢失div中找到的先前数据的情况下将新数据附加到div? 问题答案: 尝试这个:

  • 我正在尝试将lambda函数自动附加到已经存在的Api网关(未部署在堆栈中)。看起来AWS::ApiGateway::方法是实现这一点的最佳方法,但我似乎可以找到如何获取特定的Api网关RestApiId和ResourceId。我如何“获取”这些信息?有云形成的方法吗?或者我需要使用某种类型的lambda函数吗? 谢谢你帮我解决这个令人沮丧的问题!

  • 如何将json结果正确附加到select选项, json数据样本 Ajax代码: html代码: 我已经设置为我的php文件