首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >get_points中的渐近plot_implicit

get_points中的渐近plot_implicit
EN

Stack Overflow用户
提问于 2021-10-03 06:10:18
回答 1查看 429关注 0票数 0

我一直试图用等高线图来求解一个隐式方程,但我意识到它考虑到了我的方程的奇异性,所以我得到了错误的图。正因为如此,我尝试了sympy.plot_implicit。幸运的是,它工作正常,但我还没有找到在sympy.plot_implicit生成的图形上设置标签的适当方法。为此目的,我需要获得sympy.plot_implicit用于生成其图形的点,并将它们用于matplotlib。这样,我得到了我的隐式方程的正确解,并且我可以很容易地为解的图设置标签。此时,当我试图从sympy.plot_implicit获得观点时,我面临着许多问题,我的意思是,当我只使用sympy.plot时,没有任何问题,但是当我使用sympy.plot_implicit时,问题就出现了。

我已经附上密码了,谢谢。最好的

代码语言:javascript
复制
import matplotlib.pyplot as plt
import sympy as sp
from sympy.abc import x,y,z

def z(x, y):
    return x - y

line = sp.plot(x**2,(x,-1,0), show=False)

#line = sp.plot_implicit(z(x, y), (x, 0, 1), (y, 0, 1), show=False)

x, y = line[0].get_points()

plt.plot(x, y)

plt.show()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-03 18:27:28

您可以使用来自move_sympyplot_to_axesDisplay two Sympy plots as two Matplotlib subplots函数,如其注释中所解释的那样调整一行。

要在图例中获得某些内容,matplotlib的标准方法是向特定元素添加一个标签。在这种情况下,隐式区域似乎存储为ax.patches中的多边形。这样的多边形将在图例中显示为有颜色的矩形。为了获得一行,可以创建一个自定义的图例元素。

在这种情况下,解决方案被表示为一个薄薄的多边形,而不是一条线,p1[0].get_points()不工作。但是,您可以从matplotlib多边形修补程序中提取多边形的顶点:

代码语言:javascript
复制
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D
import sympy as sp
from sympy.abc import x, y, z

def move_sympyplot_to_axes(p, ax):
    backend = p.backend(p)
    backend.ax = ax
    backend._process_series(backend.parent._series, ax, backend.parent)
    backend.ax.spines['right'].set_color('none')
    backend.ax.spines['top'].set_color('none')
    backend.ax.spines['bottom'].set_position('zero')
    plt.close(backend.fig)

def z(x, y):
    return (x ** 2 + y ** 2 - 1) ** 3 - x ** 2 * y ** 3

p1 = sp.plot_implicit(z(x, y), (x, -1.5, 1.5), (y, -1.5, 1.5), show=False)

fig, ax = plt.subplots()

move_sympyplot_to_axes(p1, ax)
# ax.patches[0].set_label("my label")
handles = [Line2D([], [], color=ax.patches[0].get_facecolor())]
ax.legend(handles=handles, labels=["my label"], loc='upper left')

vertices = ax.patches[0].get_path().vertices
ax.plot(vertices[:, 0], vertices[:, 1], ls=':', color='gold', lw=10, alpha=0.5, zorder=0)

plt.show()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69422485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档