#python #python_3x #matplotlib #numpy
Всем привет. Перед мной стоит задача соединить точки, но как бы я не пытался ничего
не выходит либо точки, либо пустой график.
Как можно соединить точки, так чтобы образовалась сеть?
И вопрос не в тему, почему на втором графике не задается сетка? Задается только если
явно в цикле писать.
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)
Ответы
Ответ 1
Если задача - соединить точки, принадлежащие концентрическим окружностям, то можно так сделать: 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 методами
Комментариев нет:
Отправить комментарий