由于海运使用matplotlib进行绘图,所以大部分(全部?)它的函数有一些方法可以将参数传递给绘制绘图的下面的matplotlib函数。这是一个很好的设计,它允许灵活性,而不把高级别的海运功能与太多的参数相混淆。
然而,似乎有两种不同的机制来做到这一点。有些函数只是接受任意关键字参数,而任何高级函数无法识别的都只是简单地传递给底层matplotlib函数。另一些则要求您将额外的关键字参数放入dict中。
例如,seaborn.scatterplot和seaborn.lmplot都使用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})也许我遗漏了一些显而易见的东西,但我一直无法弄清楚为什么会使用这些不同的机制。是因为海运工作方式内部的某些东西对最终用户来说是不可见的吗?是一种风格遗产,而代码正在转向另一种样式吗?
发布于 2019-06-17 20:36:43
seaborn.lmplot具有scatter_kws和line_kws参数。scatter_kws关键字dict传递给对Matplotlib的scatter函数的底层调用,而line_kws传递给对Matplotlib的plot函数的底层调用。
由于底层Matplotlib scatter和plot调用共享一些关键字参数(例如color),因此使用两个dicts允许用户单独控制这两个参数。也就是说,用户可以指定散点图颜色为,比如说,红色,而线条图可以是蓝色。
相反,sns.scatterplot将其所有关键字参数发送给基础Matplotlib scatter调用。因此不需要消除歧义。
发布于 2019-06-17 20:36:54
lmplot将一个regplot绘制到一个FacetGrid上。regplot由一组点(用于scatter )和一行(用于plot )组成。
假设您将参数s传递给每个基础matplotlib函数。它将被传递给scatter (它用于其目的),但也传递给没有任何s参数的plot。轰隆隆。错误。
此外,还有一些参数对两者都有效,比如color;但是您可能希望正则图行与点颜色不同。
这就是为什么将几个绘图类型组合在一起的seaborn中的函数允许这些单独的参数。
https://stackoverflow.com/questions/56638399
复制相似问题