seaborn.objects.Plot.on#
- Plot.on(target)#
为绘制图形提供现有的 Matplotlib 图形或轴。
使用此方法时,您还需要显式调用触发编译的方法,例如
Plot.show()
或Plot.save()
。如果您想使用 matplotlib 进行后期处理,则需要先调用Plot.plot()
来编译图形而无需渲染它。- 参数::
- targetAxes, SubFigure 或 Figure
要使用的 Matplotlib 对象。传递
matplotlib.axes.Axes
将添加艺术家而不修改图形。否则,将在给定matplotlib.figure.Figure
或matplotlib.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()
或者,调用
matplotlib.pyplot.figure()
将把轴的创建推迟到Plot
,它将应用默认主题(以及使用Plot.theme()
指定的任何自定义设置)f = plt.figure() p.on(f).show()
创建
matplotlib.figure.Figure
对象将完全绕过pyplot
。这可能有助于将Plot
图形嵌入 GUI 应用程序中f = mpl.figure.Figure() p.on(f).plot()
使用
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
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) )