Вставить легенду для функций matplotlib - PullRequest
0 голосов
/ 14 сентября 2018

Я создал функцию с циклом из трех переменных S, T, L. Каждая из этих переменных имеет небольшое, среднее и большое значение (например, Ss, Sm, Sb). Затем, используя функцию (формулу), я рассчитал 27 (каждое значение друг с другом) функций, которые зависят от расстояния. Сюжет выглядит хорошо, однако я не могу нарисовать легенду с надписями к нему. Я хотел бы иметь легенду «Sm, Tm, Bm» или «Sm, Tb, Bm» для каждой функции.

#variables
S = namedtuple('S', ['b', 'm', 's'])
T = namedtuple('T', ['b', 'm', 's'])
L = namedtuple('L', ['b', 'm', 's'])

s = S(b=0.00168, m=0.00112, s=0.000560)
t = T(b=750.0, m=645.0, s=550.0)
l = L(b=0.07, m=0.05, s=0.02)


distance = np.zeros((100))
result = np.zeros((3, 3, 3, 100))

def jimmy_jao_formula(m: int, sx: float, tx: float, lx: float):
    Ho = 2
    w = 0.26
    p = (1.0/math.sqrt(2)) * (((lx/tx)**2.0 + (w*sx/tx)**2)**(1/2) + (lx/tx))**(1/2)
    Hx = Ho * math.exp(-p*m)
    return Hx  

for mi, m in enumerate(range(0, 3000, 30)):
    print(f'Working on distance {m} - step {mi}')
    for si, sx in enumerate(s):
        for ti, tx in enumerate(t):
            for li, lx in enumerate(l):
                hx = jimmy_jao_formula(m, sx, tx, lx)
                #formula Jimmy Jao
                result[si, ti, li, mi] = hx 
                distance[mi] = m

# plot the result.
plt.figure(figsize=(20,10))

for a in range(3):
    for b in range(3):
        for c in range(3):
            plt.plot(distance, result[a, b, c, :])

1 Ответ

0 голосов
/ 14 сентября 2018

Просто используйте другой enumerate, например for a, la in enumerate(['Ss', 'Sm', 'Sb']).Затем вы можете создать метку с помощью label = ','.join([la, lb, lc]) и прикрепить ее к графику с помощью plt.plot(..., label=label).И не забудьте позвонить plt.legend(), как только вы закончите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...