对于包含垂直渐近线的函数,y^2 = x^3/(2(3)- x)例如,matplotlib将在渐近线处添加vertical lines,这主要会抛出expected图。()from sympy.我试过将adaptive属性设置为True,这会删除线条,但也会删除样式,并且由于某些原因使得绘图线粗细变化,看起来真的是warped。我想保持adaptive=False。由于特定于我的应用程序的原因,我需要使用plot_implicit(),而不能使用contour()或plot()或其他东西。
from matplotlib.colors import ListedColormap
from sympy import *
from sympy.parsing.sympy_parser import *
import spb
qVal = "y**2 = x**3/(2*(3) - x)"
x, y = symbols('x y')
cmap = ListedColormap(["teal"], "#ffffff00")
lhs,rhs = qVal.split('=')
lhs = eval(lhs)
rhs = eval(rhs)
plot = spb.plot_implicit(Eq(lhs, rhs), (x, -10, 10), (
y,-5, 5), adaptive=False,show=True, rendering_kw= {"cmap": cmap}, aspect='equal')
1条答案
按热度按时间i7uaboj41#
plot_implici
withadaptive=False
使用一个简单的meshgrid方法来计算一个函数,它使用matplotlib的contour功能来绘制零级轮廓。“simple”的意思是它不应用任何后处理。你可以看看你的函数的3D图,它也使用meshgrid方法,来理解发生了什么:由于没有对评估数据进行后处理,因此图中连接了渐近线的两侧。当您采用零水平轮廓时,您将获得该垂直线。遗憾的是,meshgrid方法目前没有实现渐近线检测。
您可以安装newer release of the module以将
plot_implicit
与adaptive=True
和自定义样式一起使用:正如你所注意到的,自适应算法往往会产生不均匀的线条或区域,我对此无能为力。
更好的方法是对符号方程进行一些后处理。例如: