seaborn.objects.Plot.on#

Plot.on(target)#

プロットを描画するための既存の Matplotlib の figure または axes を提供します。

このメソッドを使用する場合、Plot.show() または Plot.save() のようにコンパイルをトリガーするメソッドを明示的に呼び出す必要もあります。matplotlib を使用して後処理を行う場合は、最初に Plot.plot() を呼び出して、レンダリングせずにプロットをコンパイルする必要があります。

パラメータ:
targetAxes, SubFigure, または Figure

使用する Matplotlib オブジェクト。matplotlib.axes.Axes を渡すと、figure を変更せずにアーティストが追加されます。それ以外の場合は、指定された matplotlib.figure.Figure または matplotlib.figure.SubFigure の空間内にサブプロットが作成されます。

matplotlib.axes.Axes オブジェクトを渡すと、seaborn の軸レベルのプロット関数に最も近い機能が提供されます。結果の画像が Plot で作成された他の画像とどのように異なって見えるかに注意してください。これは、プロットのテーマが、Plot のデフォルトではなく、axes が作成されたときのグローバル rcParams を使用するためです。

p = so.Plot(diamonds, "carat", "price").add(so.Dots())
f, ax = plt.subplots()
p.on(ax).show()
../_images/objects.Plot.on_2_0.png

代わりに、matplotlib.pyplot.figure() を呼び出すと、axes の作成が Plot に委ねられ、デフォルトのテーマ(および Plot.theme() で指定されたカスタマイズ)が適用されます。

f = plt.figure()
p.on(f).show()
../_images/objects.Plot.on_4_0.png

matplotlib.figure.Figure オブジェクトを作成すると、pyplot が完全にバイパスされます。これは、GUI アプリケーションに Plot の figure を埋め込むのに役立つ場合があります。

f = mpl.figure.Figure()
p.on(f).plot()
../_images/objects.Plot.on_6_0.png

Plot.on を使用すると、基になる matplotlib オブジェクトにもアクセスできるようになり、詳細なカスタマイズに役立つ場合があります。ただし、Plot が指定、コンパイル、カスタマイズ、表示される操作の順序に注意する必要があります。

f = mpl.figure.Figure()
res = p.on(f).plot()

ax = f.axes[0]
rect = mpl.patches.Rectangle(
    xy=(0, 1), width=.4, height=.1,
    color="C1", alpha=.2,
    transform=ax.transAxes, clip_on=False,
)
ax.add_artist(rect)
ax.text(
    x=rect.get_width() / 2, y=1 + rect.get_height() / 2,
    s="Diamonds: very sparkly!", size=12,
    ha="center", va="center", transform=ax.transAxes,
)

res
../_images/objects.Plot.on_8_0.png

Matplotlib 3.4 では、サブプロットの複数の配置を合成しやすくする matplotlib.figure.Figure.subfigures() の概念が導入されました。これらは Plot.on() にも渡すことができます。

f = mpl.figure.Figure(figsize=(7, 4), dpi=100, layout="constrained")
sf1, sf2 = f.subfigures(1, 2)

p.on(sf1).plot()
(
    so.Plot(diamonds, x="price")
    .add(so.Bars(), so.Hist())
    .facet(row="cut")
    .scale(x="log")
    .share(y=False)
    .on(sf2)
)
../_images/objects.Plot.on_10_0.png