9

私はmatplotlibでいくつかのプロットを行っています.ポイントがどのセンサーで記録されたかを視聴者に伝える凡例があります. 複数のタイプの複数のセンサーがあり、各グループがどのようなセンサーであるかを視聴者に伝えるために、凡例内にサブタイトルを付けたいと思います。私は実用的な解決策を持っていますが、ここに示されているのはちょっとしたハックです:

ここに画像の説明を入力

凡例が作成されるとき、凡例マーカーのリストと凡例ラベルのリストという 2 つの重要な引数を受け取ります。私の現在の解決策は、字幕マーカーを白い枠のある白いボックスに設定し、字幕ラベルを2つの改行文字で囲むことです。見た目は問題ありませんが、字幕がインデントされていなければ、よりプロフェッショナルに見えます. 私が試した 2 つの回避策は、字幕のマーカーを [なし] に設定することと、字幕のマーカーを目的の字幕文字列に設定し、そのラベルを空の文字列に設定することです。どちらも機能していません。誰もこれについて経験がありますか?本当にありがとう。

4

1 に答える 1

9

私が思いついた最善の方法は、文字列のカスタム ハンドラーを作成することです。

import matplotlib.pyplot as plt
import matplotlib.text as mtext


class LegendTitle(object):
    def __init__(self, text_props=None):
        self.text_props = text_props or {}
        super(LegendTitle, self).__init__()

    def legend_artist(self, legend, orig_handle, fontsize, handlebox):
        x0, y0 = handlebox.xdescent, handlebox.ydescent
        title = mtext.Text(x0, y0, r'\underline{' + orig_handle + '}', usetex=True, **self.text_props)
        handlebox.add_artist(title)
        return title


[line1] = plt.plot(range(10))
[line2] = plt.plot(range(10, 0, -1), 'o', color='red')
plt.legend(['Title 1', line1, 'Title 2', line2], ['', 'Line 1', '', 'Line 2'],
           handler_map={basestring: LegendTitle({'fontsize': 18})})

plt.show()

出力

これはhttp://matplotlib.org/users/legend_guide.htmlの例に基づいています。

于 2016-07-20T16:37:29.920 に答える