Нарисовать графики функций

Задача заключается в том, чтобы получить следующий результат:

график

Чтобы решить эту задачу я описал четыре метода для построения графиков. Каждый из них рисует определенный цветной участок. Если присмотреться, то видно что есть повторяющиеся фрагменты. Как можно добиться такого результата ограничиваясь логикой двух методов?

Пример моего кода:

# импортируем модули
import numpy as np
import matplotlib.pyplot as plt

def solwave1(x, a, b, c, d):
    y = []
    counter = 0
    step = 2.5
    for xx in x:        
        if xx<=a:     
            y += [0.0]
        elif a<=xx<=b:
            y += [np.float64((xx-a)/(b-a))]
        elif b<=xx<=c:
            y += [1.0]
        elif c<=xx<=d:
            y += [np.float64((d-xx)/(d-c))]
        if d<=xx:         
            y += [0.0]  
    return np.array(y)    
    

plt.title('Нечітка логіка') # заголовок
plt.grid() # сітка
# створюємо область, в якій буде відображатися графік
x = np.linspace(0,16,256)
# параметри
a=2.5
b=4.0
c=6.0
d=7.5
# вісь
plt.axis([0, 16, 0, 1.2])
# малюємо графіки
plt.plot(x, solwave1(x, a, b, c, d), lw=2, color="mediumseagreen")
# відображаємо графік
plt.show()

По сути я понимаю, что должен ещё быть дополнительный цикл. Можно задать шаг для смещения и количество операций, но после создания такого метода в меня возникали ошибки. Буду рад, если кто-то поможет. Фрагмент кода приведенный выше правильно работает.


Ответы (1 шт):

Автор решения: RomanR
Вот так нужно? Я просто добавил цикл увеличивающий координаты, цвета задаются по дефолту. Или нужны конкретные цвета?
import numpy as np
import matplotlib.pyplot as plt


def solwave1(x, a, b, c, d):
    y = []
    counter = 0
    step = 2.5
    for xx in x:
        if xx <= a:
            y += [0.0]
        elif a <= xx <= b:
            y += [np.float64((xx - a) / (b - a))]
        elif b <= xx <= c:
            y += [1.0]
        elif c <= xx <= d:
            y += [np.float64((d - xx) / (d - c))]
        if d <= xx:
            y += [0.0]
    return np.array(y)


plt.title('Нечітка логіка')  # заголовок
plt.grid()  # сітка
# створюємо область, в якій буде відображатися графік
x = np.linspace(0, 16, 256)
# параметри
a = 2.5
b = 4.0
c = 6.0
d = 7.5
plt.axis([0, 16, 0, 1.2])
for i in range(4):
    plt.plot(x, solwave1(x, a, b, c, d), lw=2)
    a += 2.5
    b += 2.5
    c += 2.5
    d += 2.5
# вісь

# малюємо графіки

plt.show()
→ Ссылка