使用matplotlib和python

时间:2018-08-18 11:54:52

标签: python-3.x matplotlib math trigonometry

作为学习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()

My plot. It has not negative Y values

我想画一个完整的圆圈。我的代码只产生正y值,我想绘制整个圆。

这是整个情节的样子。我用Wolfram Alpha生成了它。

The correct implicit contour plot from Wolfram Alpha

理想情况下,我不希望使用诸如matplotlib.pyplot.contour之类的解决方案。作为一项学习练习,我想说“看工作”。也就是说,理想情况下,我想生成所有值并“手动”绘制它们。

我能想到的唯一方法是重新排列方程式,并生成带有计算出的x值的一组负y值,然后分别绘制它们。我确信有一种更好的方法可以实现结果,并且我相信Stack Overflow的专家之一会知道这些选择是什么。

将非常感谢您的帮助。 :-)

1 个答案:

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

enter image description here