你可以使用seaborn
's FacetGrid http://stanford.edu/%7Emwaskom/software/seaborn/tutorial/axis_grids.html#subsetting-data-with-facetgrid类以获得想要的结果。
您需要用以下几行替换绘图调用:
# sns.lmplot('x1', 'y1', df1, fit_reg=True, ci = None)
# sns.lmplot('x2', 'y2', df2, fit_reg=True, ci = None)
df = pd.concat([df1.rename(columns={'x1':'x','y1':'y'})
.join(pd.Series(['df1']*len(df1), name='df')),
df2.rename(columns={'x2':'x','y2':'y'})
.join(pd.Series(['df2']*len(df2), name='df'))],
ignore_index=True)
pal = dict(df1="red", df2="blue")
g = sns.FacetGrid(df, hue='df', palette=pal, size=5);
g.map(plt.scatter, "x", "y", s=50, alpha=.7, linewidth=.5, edgecolor="white")
g.map(sns.regplot, "x", "y", ci=None, robust=1)
g.add_legend();
这将产生这个图:
如果我理解正确的话,这就是你所需要的。
请注意,您需要注意.regplot
参数,并且可能想要更改我作为示例给出的值。
-
;
该行末尾的内容是抑制命令的输出(我在可见的地方使用 ipython 笔记本)。
-
Docs http://seaborn.pydata.org/tutorial/axis_grids.html#plotting-on-data-aware-grids给出一些解释
.map()
方法。本质上,它就是这样做的,将绘图命令与数据映射。然而,它可以与“低级”绘图命令一起使用,例如regplot
, 并不是lmlplot
,这实际上是在幕后调用 regplot 。
- 通常情况下
plt.scatter
将采用参数:c='none'
, edgecolor='r'
制作未填充的标记。但是seaborn正在干扰这个过程并强制标记颜色,所以我没有看到一个简单/直接的方法来解决这个问题,而是操纵ax
Seaborn 产生情节后的元素,最好作为不同问题的一部分来解决。