🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1409閲覧

凡例に2つのタイトルを含めたい

ttnabe

総合スコア4

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/10/15 05:17

凡例に2つタイトルを含めて表示したい

pythonのmatplotlibで可視化するプログラムを作成しています。
凡例を2つに分けてそれぞれにタイトルをつけているのですが、凡例1つに対してタイトル2つ表示できないか苦心しています。

該当のソースコード

以下のプログラムでは凡例が線形
linear
y=x
y=2x
と非線形
non-linear
y=x^2
y=2x^2
の2つに分かれて表示されます。

python

1import numpy as np 2import matplotlib.pyplot as plt 3 4fig, ax = plt.subplots() 5x = np.linspace(0, 2, 100) 6y1 = x; y2 = 2*x 7p1, = plt.plot(x, y1, label="$y=x$") 8p2, = plt.plot(x, y2, label="$y=2x$") 9legend_p = plt.legend(handles=[p1, p2], loc=2, title="linear") 10plt.gca().add_artist(legend_p) 11y1 = x**2; y2 = 2*x**2 12 13q1, = plt.plot(x, y1, label="$y=x^2$") 14q2, = plt.plot(x, y2, label="$y=2x^2$") 15legend_q = plt.legend(handles=[q1, q2], loc=6, title="non-linear") 16plt.gca().add_artist(legend_q) 17plt.show()

ここで表示される凡例を結合してそれぞれに対してタイトルをつけることは可能でしょうか。
つまり同じ箱に以下のようにまとめて表示することは可能でしょうか。
タイトル含め3行の凡例が(ncol=2で並ぶように3×2で)横並びに出るように結合できると嬉しいですが
6行になってもよいので、そういうことが可能かどうか、また可能ならその方法も教えてください。

3×2
linear non-linear
y=x y=x^2
y=2x y = 2x^2

6行
linear
y=x
y=2x
non-linear
y=x^2
y=2x^2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

https://stackoverflow.com/questions/44071525/matplotlib-add-titles-to-the-legend-rows/44072076#44072076
を参考にしてイメージに近いもの(3×2ではなくて2×3)を作成することができました。
空のlineを作成すればよかったようです。
ここから自分の使いたいように改良していこうと思います。
どうもありがとうございました。

python

1fig, ax = plt.subplots() 2x = np.linspace(0, 2, 100) 3y = 2*x 4p1, = plt.plot(x, y, label="$y=2x$") 5y = 5*x 6p2, = plt.plot(x, y, label="$y=5x$") 7 8y = 2*x**2 9q1, = plt.plot(x, y, label="$y=2x^2$") 10y = 5*x**2 11q2, = plt.plot(x, y, label="$y=5x^2$") 12 13h, l = ax.get_legend_handles_labels() 14ph = [plt.plot([],marker="", ls="")[0]]*2 15handles = ph + h 16labels = ["Linear:", "Non-linear:"] + l 17plt.legend(handles, labels, ncol=3) 18 19plt.show()

投稿2019/10/15 05:35

ttnabe

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問