情节方程显示一个圆圈

Ely*_*kim 9 python plot equation numpy matplotlib

以下公式用于对来自二维空间的点进行分类:

f(x1,x2) = np.sign(x1^2+x2^2-.6)
Run Code Online (Sandbox Code Playgroud)

所有点都在空间中X = [-1,1] x [-1,1],每个x的选择概率均匀.

现在我想要想象出等于的圆圈:

0 = x1^2+x2^2-.6
Run Code Online (Sandbox Code Playgroud)

x1的值应该在x轴上,而值x2在y轴上.

它必须是可能的,但我很难将方程转换为图.

hit*_*tzg 13

@BasJansen的解决方案肯定会让你在那里,它要么非常低效(如果你使用许多网格点)或不准确(如果你只使用几个网格点).

您可以直接轻松绘制圆圈.鉴于0 = x1**2 + x**2 - 0.6x2 = sqrt(0.6 - x1**2)(如Dux所述).

但你真正想做的是将笛卡尔坐标转换为极坐标.

x1 = r*cos(theta)
x2 = r*sin(theta)
Run Code Online (Sandbox Code Playgroud)

如果你在圆方程中使用这些子,你会看到r=sqrt(0.6).

所以现在你可以用你的情节:

import numpy as np
import matplotlib.pyplot as plt

# theta goes from 0 to 2pi
theta = np.linspace(0, 2*np.pi, 100)

# the radius of the circle
r = np.sqrt(0.6)

# compute x1 and x2
x1 = r*np.cos(theta)
x2 = r*np.sin(theta)

# create the figure
fig, ax = plt.subplots(1)
ax.plot(x1, x2)
ax.set_aspect(1)
plt.show()
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述


Bas*_*sen 6

您可以使用等高线图,如下所示(基于http://matplotlib.org/examples/pylab_examples/contour_demo.html上的示例):

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-1.0, 1.0, 100)
y = np.linspace(-1.0, 1.0, 100)
X, Y = np.meshgrid(x,y)
F = X**2 + Y**2 - 0.6
plt.contour(X,Y,F,[0])
plt.show()
Run Code Online (Sandbox Code Playgroud)

这产生以下图表

在此输入图像描述

最后,一些一般性陈述:

  1. x^2并不意味着你认为它在python中的作用,你必须使用x**2.
  2. x1并且x2非常误导(对我而言),特别是如果你声明x2必须在y轴上.
  3. (感谢Dux)您可以plt.gca().set_aspect('equal')通过使轴相等来添加以使图形实际上看起来是圆形的.

  • 在调用 `plt.show()` 之前使用 `plt.gca().set_aspect('equal')` 来实现圆形... (2认同)

Dux*_*Dux 5

如何绘制x值并计算相应的y值?

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-1, 1, 100, endpoint=True)
y = np.sqrt(-x**2. + 0.6)

plt.plot(x, y)
plt.plot(x, -y)
Run Code Online (Sandbox Code Playgroud)

产生

在此输入图像描述

这显然可以做得更好,但这仅用于演示......


che*_*767 5

# x**2  + y**2 = r**2
r = 6
x = np.linspace(-r,r,1000)
y = np.sqrt(-x**2+r**2)
plt.plot(x, y,'b')
plt.plot(x,-y,'b')
plt.gca().set_aspect('equal')
plt.show()
Run Code Online (Sandbox Code Playgroud)

产生:

在此输入图像描述


Amj*_*jad 5

使用复数绘制圆

想法:将一个点乘以复指数(在此输入图像描述) 旋转圆上的点

import numpy as np
import matplotlib.pyplot as plt

num_pts=20 # number of points on the circle
ps = np.arange(num_pts+1)
# j = np.sqrt(-1)
pts = np.exp(2j*np.pi/num_pts *(ps))

fig, ax = plt.subplots(1)
ax.plot(pts.real, pts.imag , '-o')
ax.set_aspect(1)
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述