Почему моя легенда не будет двигаться в Python

Мне пришлось создать простой граф, чтобы изучить свойства построения графиков в Python. Одним из таких свойств является размещение легенды. Код для этого - ax.legend(loc="некоторое число"). Различные цифры, которые вы указали в этом фрагменте кода, который я упоминаю, определяют местоположение легенды. Однако, независимо от того, какое число я поставил, моя легенда никогда не меняет положение. Есть ли более глубокая проблема, которую я пропускаю, или может быть что-то не так с моей программой?

def line_plot():
    x=np.linspace(-np.pi,np.pi,30)
    cosx=np.cos(x)
    sinx=np.sin(x)
    fig1, ax1 = plt.subplots()
    ax1.plot(x,np.sin(x), c='r', lw=3)
    ax1.plot(x,np.cos(x), c='b', lw=3)
    ax1.set_xlabel('x')
    ax1.set_ylabel('y')
    ax1.legend(["cos","sin"])
    ax1.legend(loc=0);
    ax1.set_xlim([-3.14, 3.14])
    ax1.set_xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi])
    ax1.grid(True)
    ax1.set_xticklabels(['-'+r'$\pi$', '-'+r'$\pi$'+'/2',0, r'$\pi$'+'/2', r'$\pi$'])
    plt.show()

    return

if __name__ == "__main__":
    line_plot()

1 ответ

Решение

Когда вы строите свои данные, вы должны дать им label для того, чтобы легенда появилась. Если вы этого не сделаете, то вы получите UserWarning: No labelled objects found. Use label='...' kwarg on individual plots. и ты не сможешь переместить свою легенду. Таким образом, вы можете легко изменить это, выполнив следующее:

def line_plot():
    x=np.linspace(-np.pi,np.pi,30)
    cosx=np.cos(x)
    sinx=np.sin(x)
    fig1, ax1 = plt.subplots()
    ax1.plot(x,np.sin(x), c='r', lw=3,label='cos') #added label here
    ax1.plot(x,np.cos(x), c='b', lw=3,label='sin') #added label here
    ax1.set_xlabel('x')
    ax1.set_ylabel('y')
    #ax1.legend(["cos","sin"]) #don't need this as the plots are already labelled now
    ax1.legend(loc=0);
    ax1.set_xlim([-3.14, 3.14])
    ax1.set_xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi])
    ax1.grid(True)
    ax1.set_xticklabels(['-'+r'$\pi$', '-'+r'$\pi$'+'/2',0, r'$\pi$'+'/2', r'$\pi$'])
    plt.show()

    return

if __name__ == "__main__":
    line_plot()

Это дает сюжет ниже. Теперь меняем значение loc меняет положение легенды.

введите описание изображения здесь

РЕДАКТИРОВАТЬ:

1) Я дал каждый набор данных, которые вы составили свои label, Затем, когда вы доберетесь до линии ax1.legend(loc=0) Затем matplotlib устанавливает легенду для включения этих меток в легенду. Это самый "питонный" способ написания легенды.

Другие вопросы по тегам