在jupter笔记本中的seaborn:为什么sns.despine()适用于lmplot但不适用于regplot?

时间:2018-01-10 18:48:31

标签: python matplotlib data-visualization seaborn

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

  

了解regplot()和lmplot()之间的区别可以是a   有点棘手。事实上,正如lmplot()所使用的那样,它们密切相关   regplot()在内部并占用其大部分参数。然而,   regplot()是一个轴级函数,因此它直接绘制到轴上   (当前活动的轴或轴提供的轴)   参数),而lmplot()是一个图级功能并创建它   自己的形象,通过FacetGrid管理。这有一些   后果,即regplot()可以愉快地共存于一个数字中   与其他种类的情节一起,将遵循全球matplotlib颜色   周期。相比之下,lmplot()需要占据整个数字,而且   尺寸和颜色周期通过功能参数控制,   忽略全局默认值。

但我并不完全理解"数字"和#34;轴。"在不知道底层模型的情况下,我可以做出的最佳猜测是,当Seaborn内置的这些奇怪的全局状态变异函数(如despine和(?)set_palette等)处于活动状态时,只有& #34;图中,"不是"轴,"在渲染之前检查那个状态?但是,如果是这样的话,我将如何获得产生"轴的东西"根据我的要求进行策划?

1 个答案:

答案 0 :(得分:2)

简而言之:在您的绘图功能后调用sns.despine

版本较长:

lmplot创造了自己的身材。但它不需要despine。即使不调用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,它将作用于新创建的图形。因此,问题的代码创建了两个数字。一个是空的,但也是'#34; despined"然后是一个lmplot数字,而且是#34; despined"因为默认情况下每个lmplot都被鄙视。

而是在matplotlib图的轴上创建regplot。如果没有提供图形或轴,则会创建一个新图形或轴。这意味着sns.despine需要知道哪些轴要去高山。如果你先把它召唤出来,那么又会有两个数字:一个是空的,但也是#34; despined"然后是一个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