使用 matplotlib 面向对象接口通过 seaborn 进行绘图
- 2025-02-10 08:57:00
- admin 原创
- 48
问题描述:
我非常喜欢使用matplotlib
OOP 风格:
f, axarr = plt.subplots(2, sharex=True)
axarr[0].plot(...)
axarr[1].plot(...)
这使得跟踪多个图形和子图变得更加容易。
问题:如何以这种方式使用 seaborn?或者,如何将此示例更改为 OOP 样式?如何告诉seaborn
绘图函数,例如它要绘制到lmplot
哪个函数?Figure
`Axes`
解决方案 1:
这有点取决于您所使用的 seaborn 函数。
seaborn 中的绘图函数大致分为两种类型:
“轴级”函数,包括、、
regplot
和许多其他函数boxplot
`kdeplot`“图形级”函数,包括、 、 、
relplot
以及catplot
一displot
两个其他函数pairplot
`jointplot`
第一组是通过获取显式ax
参数并返回Axes
对象来识别的。正如它所暗示的那样,您可以通过将你的传递给它们以“面向对象”风格使用它们Axes
:
f, (ax1, ax2) = plt.subplots(2)
sns.regplot(x, y, ax=ax1)
sns.kdeplot(x, ax=ax2)
轴级函数只会绘制到图形上Axes
,而不会对图形造成干扰,因此它们可以在面向对象的 matplotlib 脚本中完美共存。
第二组函数(图形级)的特点是,生成的绘图可能包含多个轴,这些轴始终以“有意义”的方式组织。这意味着函数需要完全控制图形,因此不可能将图形绘制到已经lmplot
存在的图形上。调用该函数始终会初始化图形并将其设置为要绘制的特定绘图。
但是,一旦调用lmplot
,它将返回一个类型为的对象FacetGrid
。此对象有一些对结果图进行操作的方法,这些方法对图的结构有所了解。它还在FacetGrid.fig
和FacetGrid.axes
参数处公开了底层图形和轴数组。该jointplot
函数非常相似,但它使用了一个JointGrid
对象。因此,您仍然可以在面向对象的上下文中使用这些函数,但所有自定义都必须在调用该函数后进行。
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD