kwargs和e.g.有什么区别scatter_kws在seaborn中?

时间:2019-06-17 20:21:08

标签: python data-visualization seaborn

由于seaborn使用matplotlib进行绘图,因此其大多数功能(全部?)都可以通过某种方式将参数传递给绘制绘图的基本matplotlib函数。这是一个很好的设计,它具有灵活性,而不会因过多的参数而使高级Seaborn功能混乱不堪。

但是,似乎有两种独立的机制可以做到这一点。有些函数只接受任意的关键字参数,而高级函数无法识别的任何参数都只是传递给底层的matplotlib函数。其他要求您将其他关键字参数放入字典中。

例如,seaborn.scatterplotseaborn.lmplot都由AFAIK使用matplotlib.pyplot.scatter作为基础绘图功能。如果我们想将s参数传递给matplotlib.pyplot.scatter以控制大小,则可以在seaborn.scatterplot中将其添加到函数调用中:

sns.scatterplot(data=df, x='mpg',y='weight',s=10)

但是在seaborn.lmplot中,我们必须将其填充到scatter_kws字典中:

sns.lmplot(data=df, x='mpg',y='weight', scatter_kws={'s' : 10})

也许我遗漏了一些明显的东西,但是我无法弄清为什么使用这些不同的机制。是由于Seaborn工作方式内部的某些东西对最终用户不可见?是一种样式的遗产,而代码正在迁移到另一种样式?

2 个答案:

答案 0 :(得分:1)

seaborn.lmplot同时具有scatter_kwsline_kws参数。 scatter_kws关键字dict传递给Matplotlib的scatter函数的基础调用,而line_kws传递给Matplotlib的plot函数的基础调用。

由于底层的Matplotlib scatterplot调用共有一些关键字参数(例如color),因此使用两个字典可以使用户分别控制两者。也就是说,用户可以将散点图的颜色指定为红色,而线图的颜色可以为蓝色。

相反,sns.scatterplot将其所有关键字参数发送给基础的Matplotlib scatter调用。因此,不需要消除歧义。

答案 1 :(得分:1)

lmplotregplot绘制到FacetGrid上。 regplot由一堆点(针对这些点使用scatter)和一条线(针对其使用plot)组成。

想象一下,您将参数s传递给每个基础的matplotlib函数。它会被传递到scatter,并在其中发挥作用,还会传递给plot,后者没有任何s参数。繁荣。错误。

此外,还有对两者均有效的参数,例如color;但您可能希望重新绘制线的颜色与点的颜色不同。

这就是为什么在seaborn中的那些功能,使 combine 几种绘图类型允许这些单独的参数。