为什么我的传奇不会在Python中移动

时间:2016-03-02 22:02:25

标签: python legend-properties

我必须创建一个简单的图形来学习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 个答案:

答案 0 :(得分: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的值会更改图例的位置。

enter image description here

编辑:

1)我给你自己绘制的每组数据label。然后,当您到达ax1.legend(loc=0)行matplotlib时,然后设置图例以在图例上包含这些标签。这是绘制传奇的最“pythonic”方式。