[解決済み] Matplotlibのレジェンドが動作しない
2022-05-14 12:10:21
質問
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()
エラーが指し示すリンクは、エラーの原因を診断する上でかなり役に立たないことがわかりました。
どのように解決するのですか?
カンマを追加する必要があります。
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
関連
-
[解決済み] matplotlib でプロットをクリアするために cla()、clf() または close() をいつ使うか?
-
[解決済み] Matplotlib のプロット: 軸、凡例、空白を削除する
-
[解決済み] Matplotlibでプロットを表示するのではなく、画像ファイルに保存する。
-
[解決済み] IPythonノートブックmatplotlibプロットをインラインで行う方法
-
[解決済み] Pandasのデータフレームでタプルの列を分割するにはどうしたらいいですか?
-
[解決済み] テンプレートファイル変更時にFlaskアプリを再読み込みする
-
[解決済み] タプルの代わりにリストで出力するZip
-
[解決済み] Pythonで関数の引数として辞書の項目を渡すには?重複
-
[解決済み] リストスライスの割り当てはどのように行われるのですか?
-
[解決済み] 関数が受け取るキーワード引数をリストアップできますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Celeryでタスクのステータスを確認するには?
-
[解決済み] ネストしたdictからのPythonデータクラス
-
[解決済み] models.pyを複数のファイルに分割する
-
[解決済み] Google App EngineのためのFlaskとwebapp2の比較
-
[解決済み] pathlib.Pathオブジェクトの絶対パスを取得するには?
-
[解決済み] Django の Forms のテストはどのように書くべきですか?
-
[解決済み] Python 2 で HEAD HTTP リクエストを送信するには?
-
[解決済み] イテラブルを一定サイズのチャンクに分割する方法
-
[解決済み] sqlalchemy の declarative ORM 拡張機能で複数カラムのインデックスを使用する場合
-
[解決済み] リストの各要素に数値を乗じるには?