gpt4 book ai didi

python - jupyter笔记本中的seaborn : why does sns. despine() 适用于 lmplot 但不适用于 regplot?

转载 作者:行者123 更新时间:2023-12-01 02:18:05 25 4
gpt4 key购买 nike

Jupyter 笔记本,使用 Python 3:

import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
sns.despine()

然后

snstest1 = sns.regplot(x="foo", y="bar", data=my_data)

显示带有不需要的边框的图(即 sns.despine() 似乎没有影响它)。

但是:

snstest2 = sns.lmplot(x="foo", y="bar", data=my_data)

显示正确删除不需要的边框的绘图。

我能找到的唯一与此直接相关的文档如下,来自 the api docs for regplot :

Understanding the difference between regplot() and lmplot() can be a bit tricky. In fact, they are closely related, as lmplot() uses regplot() internally and takes most of its parameters. However, regplot() is an axes-level function, so it draws directly onto an axes (either the currently active axes or the one provided by the ax parameter), while lmplot() is a figure-level function and creates its own figure, which is managed through a FacetGrid. This has a few consequences, namely that regplot() can happily coexist in a figure with other kinds of plots and will follow the global matplotlib color cycle. In contrast, lmplot() needs to occupy an entire figure, and the size and color cycle are controlled through function parameters, ignoring the global defaults.

但我不完全理解“图形”和“轴”之间的区别。在不知道这里的底层模型的情况下,我可以做出的最好的猜测是,当这些奇怪的全局状态突变函数内置到 Seaborn 中时,例如 despine 和 (?) set_palette 等,都处于事件状态,只有“图形”,而不是“轴”,在渲染之前检查该状态吗?但如果是这样,我如何获得生成“轴”的东西来根据我的要求进行绘制?

最佳答案

简而言之:在绘图函数之后调用sns.despine

较长的版本:

lmplot 创建自己的图形。但这并不需要绝望。即使不调用 sns.despine,它也会自动执行此操作。

import matplotlib.pyplot as plt
import seaborn as sns

tips = sns.load_dataset("tips")
g = sns.lmplot(x="total_bill", y="tip", data=tips)

plt.show()

enter image description here

这就是问题中的代码实际上似乎有效的原因。 然而,真正发生的情况是,如果您在创建任何图形之前调用 sns.despine,它将作用于新创建的图形。因此,问题中的代码创建了两个数字。一个是空的,但也是“despined”的,然后是 lmplot 图形,它是“despined”的,因为每个 lmplot 默认情况下都是 despined 的。

regplot 是在 matplotlib 图形的轴中创建的。如果未提供图形或轴,它将创建一个新的。这意味着 sns.despine 需要知道要 despine 的轴。如果您在其他任何事情之前调用它,将再次出现两个图形:一个是空的,但也是“绝望”的,然后一个是 regplot 图形。这个数字轴并不“绝望”,因为没有人告诉他们这一点。

因此,我们的想法当然是在创建绘图之后调用sns.despine。您可以指定要 despine 的图形或轴作为参数 (sns.despine(ax=ax))

import matplotlib.pyplot as plt
import seaborn as sns

tips = sns.load_dataset("tips")
ax = sns.regplot(x="total_bill", y="tip", data=tips)
sns.despine(ax=ax)

plt.show()

但如果你只有一个子图,那就没有必要了。因此

tips = sns.load_dataset("tips")
sns.regplot(x="total_bill", y="tip", data=tips)
sns.despine()

将同样有效地工作并产生

enter image description here

关于python - jupyter笔记本中的seaborn : why does sns. despine() 适用于 lmplot 但不适用于 regplot?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48194193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com