我想使用python sympy plot_implicit在同一张图中绘制不同的方程式。
下面是我的示例代码,但这无法正常运行。 现在隐式函数只是圆圈,但我想处理更复杂的函数 等式在不久的将来。
此外,我也想在同一张图中绘制坐标点(在示例代码中称为“点”)。
有人能解决这个问题吗?
import math
import numpy as np
import matplotlib.pyplot as plt
from sympy import *
from sympy.plotting import plot
from sympy.plotting import plot_implicit
points = np.array([[10,20], [20, 75], [45, 15], [70, 53], [90, 30]])
weights = np.array([5, 5.1, 5.2, 4.9, 4.8])
x, y = symbols("x y")
for i in range(len(points)):
G = (x-points[i][0])**2 + (y-points[i][1])**2 - weights[i]**2
p2 = plot_implicit(G, (x,-50,100), (y,-50,100), show=False, line_color='r')
p2.extend(p2)
p2.show()
答案 0 :(得分:1)
p2.extend(p2)
是错误的,您永远不想自己扩展绘图。另外,在下一轮运行中,您对p2
所做的所有操作都会被下一轮运行抹去,因为您正在将分配给p2
。
您需要一个单独的变量,例如p
,作为图表的累加器。让我们在循环之前用None对其进行初始化,然后为它分配p2(在初始运行时),或者将其扩展p2(在随后的运行中)。条件if p
为此目的而起作用:None
是虚假的,但是包括Plot对象在内的对象是真实的。
p = None
for i in range(len(points)):
G = (x-points[i][0])**2 + (y-points[i][1])**2 - weights[i]**2
p2 = plot_implicit(G, (x,-50,100), (y,-50,100), show=False, line_color='r')
if p:
p.extend(p2)
else:
p = p2
p.show()