作为学习Matplotlib和改善数学/编码的练习,我决定尝试绘制三角函数(x平方加y平方等于1)。
三角函数也称为“圆形”函数,但是我只产生一半的圆。
#Attempt to plot equation x^2 + y^2 == 1
import numpy as np
import matplotlib.pyplot as plt
import math
x = np.linspace(-1, 1, 21) #generate np.array of X values -1 to 1 in 0.1 increments
x_sq = [i**2 for i in x]
y = [math.sqrt(1-(math.pow(i, 2))) for i in x] #calculate y for each value in x
y_sq = [i**2 for i in y]
#Print for debugging / sanity check
for i,j in zip(x_sq, y_sq):
print('x: {:1.4f} y: {:1.4f} x^2: {:1.4f} y^2: {:1.4f} x^2 + Y^2 = {:1.4f}'.format(math.sqrt(i), math.sqrt(j), i, j, i+j))
#Format how the chart displays
plt.figure(figsize=(6, 4))
plt.axhline(y=0, color='y')
plt.axvline(x=0, color='y')
plt.grid()
plt.plot(x, y, 'rx')
plt.show()
我想画一个完整的圆圈。我的代码只产生正y值,我想绘制整个圆。
这是整个情节的样子。我用Wolfram Alpha生成了它。
理想情况下,我不希望使用诸如matplotlib.pyplot.contour之类的解决方案。作为一项学习练习,我想说“看工作”。也就是说,理想情况下,我想生成所有值并“手动”绘制它们。
我能想到的唯一方法是重新排列方程式,并生成带有计算出的x值的一组负y值,然后分别绘制它们。我确信有一种更好的方法可以实现结果,并且我相信Stack Overflow的专家之一会知道这些选择是什么。
将非常感谢您的帮助。 :-)
答案 0 :(得分:2)
方程x**2 + y**2 = 1
描述了一个在原点周围半径为1的圆。
但是,假设您还不知道这一点,您仍然可以尝试在极坐标中编写该方程,
x = r*cos(phi)
y = r*sin(phi)
(r*cos(phi))**2 + (r*sin(phi))**2 == 1
r**2*(cos(phi)**2 + sin(phi)**2) == 1
由于三角标识cos(phi)**2 + sin(phi)**2 == 1
,这简化为
r**2 == 1
并且由于r
应该是真实的,所以
r == 1
(对于任何phi
)。
将其插入python:
import numpy as np
import matplotlib.pyplot as plt
phi = np.linspace(0, 2*np.pi, 200)
r = 1
x = r*np.cos(phi)
y = r*np.sin(phi)
plt.plot(x,y)
plt.axis("equal")
plt.show()