1

Pythonで作成するグラフ作成の特性を学ぶために、簡単なグラフを作成する必要がありました。これらのプロパティの 1 つは、凡例の配置です。そのようなコードは ax.legend(loc="some number") です。前述のコードに入力したさまざまな数値によって、凡例が配置される場所が決まります。しかし、どんな数字を入れても、私のレジェンドの位置は決して変わりません。私が見逃しているより深い問題がありますか、それとも私のプログラムに何か問題がある可能性がありますか?

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()
4

1 に答える 1

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. 次に、matplotlib の行に到達したらax1.legend(loc=0)、これらのラベルを凡例に含めるように凡例を設定します。これは、凡例をプロットする最も「pythonic」な方法です。

于 2016-03-02T22:11:09.893 に答える