我有一个隐式函数,比如x**2 - y = 0 (为了简化),我想要获得某个范围内的x值的图。
sympy.plot_implicit通常会传播一些我不满意的台词。
我希望能够访问所绘制的值,所以pyplot.plot比我更好。通常,我使用下面的代码来绘制显式Sympy函数,但我不知道如何在exp = sym.Eq(x**2 - y, 0)中使用类似的东西。有人有办法解决这个问题吗?
import sympy as sym
import numpy as np
from matplotlib import pyplot as plt
x, y = sym.symbols('x y', nonnegative=True)
exp = x**2
# Plot using a numpy-ready function
x_arr = np.linspace(-2, 2, 100)
exp_func = sym.lambdify(x, exp, 'numpy')
exp_arr = exp_func(x_arr)
plt.plot(x_arr, exp_arr)PS:我真正的表达式是b_sim (见下面),我想要方程b_sim = -1的图。有了sym.plot_implicit(b_sim + 1, (n,0.225,1.5), (h, -1.1, 1.1)),我就可以看到我不喜欢的线条在传播。按照Oscar的技巧here,我尝试了下面的代码,它给出了roots的一个错误。
from sympy import *
h, nu = symbols('h nu', nonnegative=True)
b_sim = 1.0*cos(pi*sqrt(1 - h)/(2*nu))*cos(pi*sqrt(h + 1)/(2*nu)) - 1.0*sin(pi*sqrt(1 - h)/(2*nu))*sin(pi*sqrt(h + 1)/(2*nu))/sqrt(1 - h**2)
eq = Eq(b_sim + 1, 0)
sols = roots(eq, h)
sym.plot(*sols, (nu, 0.225, 1.5), ylim=(-1.1, 1.1))发布于 2022-11-05 10:35:01
plot_implicit的线宽是由自适应算法引起的。如果设置选项adaptive=False,则绘图模块将使用meshgrid方法。然而,由于实现,这个数字可能不会很好(过多的“分段”)。
使用Numpy和Matplotlib可以这样做:
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
import numpy as np
expr = eq.rewrite(Add)
f = lambdify([nu, h], expr)
n = 2000j
nnu, hh = np.mgrid[0.225:1.5:n, -1.1:1.1:n]
res = f(nnu, hh)
plt.figure()
cmap = ListedColormap(["tab:blue", "tab:blue"])
plt.contour(nnu, hh, res, levels=[0], cmap=cmap)
plt.show()

发布于 2022-11-05 11:19:32
要访问渐变函数图的绘图值,在这种情况下,lines2d图的坐标很简单。
下面是绘制函数的代码。
import matplotlib.pyplot as plt
from sympy import symbols
import numpy as np
import sympy
x, y = symbols('x y', nonnegative=True)
exp = x**2
# Plot using a numpy-ready function
x_arr = np.linspace(-2, 2, 10) #small number for demo
exp_func = sympy.lambdify(x, exp, 'numpy')
exp_arr = exp_func(x_arr)
plt.figure(figsize=(4, 3))
lines2d = plt.plot(x_arr, exp_arr)

在上面的代码中,lines2d是line2d对象的列表。要从第一个坐标(本例中只有一个坐标)获取坐标,请执行以下操作:
xys = lines2d[0].get_xydata()你可以用它来绘制这个代码:-
fig = plt.figure(figsize=(4, 3))
ax = fig.add_subplot()
ax.plot(xys[:,0], xys[:,1])https://stackoverflow.com/questions/74326562
复制相似问题