Всем привет. Перед мной стоит задача соединить точки, но как бы я не пытался ничего не выходит либо точки, либо пустой график.
Как можно соединить точки, так чтобы образовалась сеть?
И вопрос не в тему, почему на втором графике не задается сетка? Задается только если явно в цикле писать.
import matplotlib.pyplot as plt
import numpy as np
def polar(n,m,L=(0,0),scale=1):
#n - кол-во кругов, m - кол-во точек, L - центр, scale - масштаб
dr=1/n#Расстояние
df=(2*np.pi)/m#Поворот
for i in range(n+1):
for k in range(m+1):
z=i*dr*np.cos(k*df)+1j*i*dr*np.sin(k*df)
w=(z-1)**2
plt.subplot(122)
plt.plot(w.real*scale,w.imag*scale,'r.')
circle=i*dr*np.cos(k*df)+1j*i*dr*np.sin(k*df)
plt.subplot(121)
plt.plot(circle.real*scale,circle.imag*scale,'r.')
plt.axis('equal')
plt.ylabel('Imaginary')
plt.xlabel('Real')
plt.grid(True)
plt.show()
polar(25,25)
Ответ
Если задача - соединить точки, принадлежащие концентрическим окружностям, то можно так сделать:
def polar(n,m,L=(0,0),scale=1):
#n - кол-во кругов, m - кол-во точек, L - центр, scale - масштаб
dr=1/n#Расстояние
df=(2*np.pi)/m#Поворот
ax1 = plt.subplot(122)
ax2 = plt.subplot(121)
ax1.grid(True)
ax2.grid(True)
k = np.arange(m+1)
for i in range(n+1):
z=i*dr*np.cos(k*df)+1j*i*dr*np.sin(k*df)
w=(z-1)**2
ax1.plot(w.real*scale,w.imag*scale,'.r-')
circle=i*dr*np.cos(k*df)+1j*i*dr*np.sin(k*df)
ax2.plot(circle.real*scale,circle.imag*scale,'.r-')
plt.axis('equal')
plt.ylabel('Imaginary')
plt.xlabel('Real')
plt.show()
polar(25, 25)
PS я избавился от внутреннего цикла по двум причинам:
для удобства соединения точек одной окружности
чтобы быстрее считать координаты "векторизованными" NumPy методами
Комментариев нет:
Отправить комментарий