Top.Mail.Ru
Ответы

Python, построение графиков

Добрый день. Должен получиться график по типу как на фото 1

Пишу код, поле графика построено, а сам график нет, в чем проблема?

Код:
import numpy as np
import matplotlib.pyplot as plt
l1=2.5
l2=2.0
q1=45
q2=90
def diagramm_rab_obl_rob(l1,l2,q1,q2):
x=[]
y=[]
for i in range(q1):
for j in range(int(-(q2/2))):
x.append(l1*np.cos(i*np.pi/180)+l2*np.cos(i*np.pi/180+j*np.pi/180))
y.append(l1*np.sin(i*np.pi/180)+l2*np.sin(i*np.pi/180+j*np.pi/180))
return x,y
x,y=diagramm_rab_obl_rob(l1,l2,q1,q2)
plt.scatter(x,y,s=0.5)

По дате
По рейтингу
Аватар пользователя
Мастер

В вашем коде есть несколько проблем:

1. Вы не импортируете matplotlib.pyplot правильно. Правильный способ импортировать его:

1
 import matplotlib.pyplot as plt  

2. Внутри функции diagramm_rab_obl_rob вы не возвращаете x и y. Вам нужно добавить оператор return в конец функции:

12345678
 def diagramm_rab_obl_rob(l1, l2, q1, q2): 
    x = [] 
    y = [] 
    for i in range(q1): 
        for j in range(int(-(q2 / 2))): 
            x.append(l1 * np.cos(i * np.pi / 180) + l2 * np.cos(i * np.pi / 180 + j * np.pi / 180)) 
            y.append(l1 * np.sin(i * np.pi / 180) + l2 * np.sin(i * np.pi / 180 + j * np.pi / 180)) 
    return x, y  

3. После того, как вы вызовете функцию diagramm_rab_obl_rob и получите значения x и y, вы должны построить график с помощью plt.plot(x, y), а не plt.scatter(x, y, s=0.5). plt.scatter используется для построения точечного графика, а plt.plot — для построения линейного графика.

Вот исправленный код:

12345678910111213141516171819
 import matplotlib.pyplot as plt 
 
def diagramm_rab_obl_rob(l1, l2, q1, q2): 
    x = [] 
    y = [] 
    for i in range(q1): 
        for j in range(int(-(q2 / 2))): 
            x.append(l1 * np.cos(i * np.pi / 180) + l2 * np.cos(i * np.pi / 180 + j * np.pi / 180)) 
            y.append(l1 * np.sin(i * np.pi / 180) + l2 * np.sin(i * np.pi / 180 + j * np.pi / 180)) 
    return x, y 
 
l1 = 2.5 
l2 = 2.0 
q1 = 45 
q2 = 90 
 
x, y = diagramm_rab_obl_rob(l1, l2, q1, q2) 
plt.plot(x, y) 
plt.show()