Страницы

Поиск по вопросам

среда, 20 февраля 2019 г.

Как соединить точки в matplotlib

Всем привет. Перед мной стоит задача соединить точки, но как бы я не пытался ничего не выходит либо точки, либо пустой график.
Как можно соединить точки, так чтобы образовалась сеть?
И вопрос не в тему, почему на втором графике не задается сетка? Задается только если явно в цикле писать.

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 методами

Комментариев нет:

Отправить комментарий