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()之间的区别可以
有点棘手。实际上,它们紧密相关,因为lmplot()使用
regplot()内部使用它的大部分参数。然而,
regplot()是轴级函数,因此它直接绘制到轴上
(当前活动的轴或斧头提供的轴
参数),而lmplot()是图级函数并创建其
自己的图形,通过FacetGrid管理。这有几个
结果,即regplot()可以在图中愉快地共存
与其他类型的情节,并将遵循全局matplotlib颜色
周期。相反,lmplot()需要占据整个图形,并且
尺寸和颜色周期是通过功能参数控制的,
忽略全局默认值。
但是我不完全理解“图”和“轴”之间的区别。我不知道这里的基本模型的最佳猜测是,当Seaborn中内置的这些奇怪的全局状态变异函数(例如
despine
和(?)set_palette
等)处于活动状态时,只有“数字”而不是“轴”,在渲染之前检查该状态?但是,如果是这样的话,我将如何获得一些生成“轴”以根据我的要求进行绘制的东西? 最佳答案
简而言之:在绘图功能之后调用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()
这就是问题代码实际上似乎起作用的原因。
但是,实际情况是,如果在创建任何图形之前调用
sns.despine
,它将作用于新创建的图形。因此,问题中的代码创建了两个图形。一个是空的,但也“固定”,然后一个是lmplot
图形,又是“固定”的,因为默认情况下每个lmplot
都是固定的。而是在matplotlib图形的轴中创建
regplot
。如果没有提供图形或轴,它将创建一个新的图形或轴。这意味着sns.despine
需要知道要去脊椎的轴。如果您先调用它,将再次出现两个数字:一个是空的,但也是“扭曲的”,然后另一个是regplot
数字。这个数字轴不是“固定”的,因为没有人告诉过他们。因此,这个想法当然是在创建绘图后调用
sns.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()
将同样工作并产生
关于python - Seaborn在Jupter笔记本中:为什么sns.despine()对lmplot有效但对regplot无效?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48194193/