9

グラフが不明瞭にならないように、凡例をプロットに合わせようとしています。

import numpy as np
import matplotlib.pyplot as plt

X = np.linspace(0,100,11)

plt.plot(X,-X, label='plot 1')
plt.plot(X,-2*X, label='plot 2')
plt.plot(X,-3*X, label='plot 3')

leg=plt.legend(ncol=2)
leg.get_frame().set_visible(False)

plt.show()

したがって、上記の最小限の作業例では、凡例の「プロット2」ラベルを右の列、つまり「プロット3」のすぐ下に移動することができます。

助けていただければ幸いです、ありがとう。

4

3 に答える 3

7

@cosmosisanswerの異なる実装。おそらくもっと柔軟です。

import numpy as np
import matplotlib.pyplot as plt

X = np.linspace(0,100,11)

plt.plot(X,-X, label='plot 1', color='red')
plt.plot(X,-2*X, label='plot 2', color='green')
plt.plot(X,-3*X, label='plot 3', color='blue')

(lines, labels) = plt.gca().get_legend_handles_labels()
#it's safer to use linestyle='none' and marker='none' that setting the color to white
#should be invisible whatever is the background
lines.insert(1, plt.Line2D(X,X, linestyle='none', marker='none'))
labels.insert(1,'')

plt.legend(lines,labels,numpoints=1, loc=4,ncol=1)

plt.show()

もう1つのオプションは、ここのように2つの凡例を作成し、ここでbbox_to_anchorキーワードを使用してそれらを置き換えることです。

(lines, labels) = plt.gca().get_legend_handles_labels()
leg1 = plt.legend(lines[:1], labels[:1], bbox_to_anchor=(0,0,0.8,1), loc=1)
leg2 = plt.legend(lines[1:], labels[1:], bbox_to_anchor=(0,0,1,1), loc=1)
gca().add_artist(leg1)

それを行うとこれ、他のオブジェクトに何も追加する必要がなくなります。

于 2013-02-07T09:39:06.847 に答える
6

凡例は、左から右に列を埋めています。言い換えると、別の行があると信じ込ませると(凡例にテキストや線の色がない)、「プロット3」の下のスペースにデータを入力できます。

import numpy as np
import matplotlib.pyplot as plt
from pylab import *

X = np.linspace(0,100,11)

plt.plot(X,-X, label='plot 1', color='red')
plt.plot(X,-2*X, label='plot 2', color='green')
plt.plot(X,-3*X, label='plot 3', color='blue')


line1 = Line2D(range(10), range(10), marker='', color="red")
line2 = Line2D(range(10), range(10), marker='',color="green")
line3 = Line2D(range(10), range(10), marker='', color="blue")
line4 = Line2D(range(10), range(10), marker='', color="white")
plt.legend((line1,line4, line3,line2),('plot1','','plot3','plot2'),numpoints=1, loc=4,ncol=2)

plt.show()
于 2013-02-06T22:09:48.330 に答える
1

Franescoの回答に基づく3番目のアプローチ。alpha = 0(透明)でプレースホルダー線を描画します。

#draw your actual lines here
#plt....

lines, labels = plt.gca().get_legend_handles_labels()

lines.insert(1, plt.Line2D([],[], alpha=0))
labels.insert(1,'')

plt.legend(lines,labels,ncol=2)
plt.show()

これには、彼の回答で説明されているのと同じ利点があります。ただし、そのソリューションはmatplotlib 1.5.1(python3の下)では機能しませんでしたValueError: Unrecognized marker style none

于 2016-11-03T14:39:46.633 に答える