seaborn.objects.Plot.on#

Plot.on(target)#

为绘制图形提供现有的 Matplotlib 图形或轴。

使用此方法时,您还需要显式调用触发编译的方法,例如 Plot.show()Plot.save()。如果您想使用 matplotlib 进行后期处理,则需要先调用 Plot.plot() 来编译图形而无需渲染它。

参数::
targetAxes, SubFigure 或 Figure

要使用的 Matplotlib 对象。传递 matplotlib.axes.Axes 将添加艺术家而不修改图形。否则,将在给定 matplotlib.figure.Figurematplotlib.figure.SubFigure 的空间内创建子图。

示例

传递 matplotlib.axes.Axes 对象提供了最接近 seaborn 的轴级绘图功能。注意,生成的图像与使用 Plot 创建的其他图像不同。这是因为绘图主题使用创建轴时全局 rcParams,而不是 Plot 默认值

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() 将把轴的创建推迟到 Plot,它将应用默认主题(以及使用 Plot.theme() 指定的任何自定义设置)

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

创建 matplotlib.figure.Figure 对象将完全绕过 pyplot。这可能有助于将 Plot 图形嵌入 GUI 应用程序中

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