#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 методами
Комментариев нет:
Отправить комментарий