Matplotlib Legendsが機能しない


94

matplotlibをアップグレードしてから、凡例を作成しようとすると次のエラーが発生します。

/usr/lib/pymodules/python2.7/matplotlib/legend.py:610: UserWarning: Legend does not support [<matplotlib.lines.Line2D object at 0x3a30810>]
Use proxy artist instead.

http://matplotlib.sourceforge.net/users/legend_guide.html#using-proxy-artist

  warnings.warn("Legend does not support %s\nUse proxy artist instead.\n\nhttp://matplotlib.sourceforge.net/users/legend_guide.html#using-proxy-artist\n" % (str(orig_handle),))
/usr/lib/pymodules/python2.7/matplotlib/legend.py:610: UserWarning: Legend does not support [<matplotlib.lines.Line2D object at 0x3a30990>]
Use proxy artist instead.

http://matplotlib.sourceforge.net/users/legend_guide.html#using-proxy-artist

  warnings.warn("Legend does not support %s\nUse proxy artist instead.\n\nhttp://matplotlib.sourceforge.net/users/legend_guide.html#using-proxy-artist\n" % (str(orig_handle),))

これは、次のような簡単なスクリプトでも発生します。

import matplotlib.pyplot as plt

a = [1,2,3]
b = [4,5,6]
c = [7,8,9]

plot1 = plt.plot(a,b)
plot2 = plt.plot(a,c)

plt.legend([plot1,plot2],["plot 1", "plot 2"])
plt.show()

エラーが私にエラーの原因を診断するのにかなり役に立たないことに向けているリンクを見つけました。

回答:


164

コンマを追加する必要があります:

plot1, = plt.plot(a,b)
plot2, = plt.plot(a,c)

コンマが必要な理由は、plt.plot()が実際にコマンドから作成された行オブジェクトの数に関係なく、行オブジェクトのタプルを返すためです。カンマがない場合、「plot1」と「plot2」はラインオブジェクトではなくタプルであるため、後でplt.legend()を呼び出すと失敗します。

カンマは暗黙的に結果をアンパックし、タプルの代わりに「plot1」と「plot2」が自動的にタプル内の最初のオブジェクト、つまり実際に必要な線オブジェクトになるようにします。

http://matplotlib.sourceforge.net/users/legend_guide.html#adjusting-the-order-of-legend-items

line、= plot(x、sin(x))コンマは何を表していますか?


2
ここに説明をコピー/追加できますか?stackoverflowは、関連部品をオンサイトでコピーすることを推奨します(ハイライト、アーカイブ)
n611x007

16

次のように、「label」キーワードを使用します。

pyplot.plot(x, y, label='x vs. y')

そして、次のように凡例を追加します。

pyplot.legend()

凡例は、太さ、色などの線のプロパティを保持します。

ここに画像の説明を入力してください


9

handlesAKAを使用Proxy artists

import matplotlib.lines as mlines
import matplotlib.pyplot as plt
# defining legend style and data
blue_line = mlines.Line2D([], [], color='blue', label='My Label')
reds_line = mlines.Line2D([], [], color='red', label='My Othes')

plt.legend(handles=[blue_line, reds_line])

plt.show()

-1

グラフのプロット中にラベルを使用すると、凡例を使用できるのはuだけです。x軸名とy軸名は凡例名とは異なります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.