如何使用python sumpy图隐式在同一图中绘制不同的隐式方程

时间:2018-09-03 02:24:48

标签: python sympy

我想使用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()

1 个答案:

答案 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()