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()


python - Seaborn在Jupter笔记本中:为什么sns.despine()对lmplot有效但对regplot无效?-LMLPHP

这就是问题代码实际上似乎起作用的原因。
但是,实际情况是,如果在创建任何图形之前调用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无效?-LMLPHP

关于python - Seaborn在Jupter笔记本中:为什么sns.despine()对lmplot有效但对regplot无效?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48194193/

10-14 19:28