首页 > 解决方案 > 如何使用 python sumpy plot implicit 在同一个图中绘制不同的隐式方程

问题描述

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

标签: pythonsympy

解决方案


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

推荐阅读