Страницы

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

пятница, 10 января 2020 г.

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

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

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

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