如何将手动定制的seaborn图添加到JointGrid / jointplot

时间:2015-07-01 19:38:44

标签: python matplotlib plot seaborn

我想使用seaborn JointGrid / jointplot。

在中间我想添加一个sns.regplot。在边缘两个sns.distplots或直方图。

这不是问题,但我想以不同的方式保留所有三个pplot,并为这三个ppl添加不同的功能和标签。

但我无法解决问题,如果我只是使用预定义的方法,如何获取图的实例:

g = sns.JointGrid(x="total_bill", y="tip", data=tips)
g = g.plot(sns.regplot, sns.distplot)

手动操纵那些。 或者反过来创建一个regplot和两个distplot实例,我定义了我的方式,然后将它们添加到JointGrid中,这意味着,但不幸的是,这些以下方法不存在或不#&#这样做:

g = sns.JointGrid(x="total_bill", y="tip", data=tips)
g.add_joint(myreg)           # That would be great but doesn't work
g.ax_marg_x.add(mydist1)     # Just invented code
g.ax_marg_y.add(mydist2)     # Just to show you, the way I'd like to solve the issue

你能给我一个建议,如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

好吧,documentation has a few examples。如果您希望两个边距都相同distPlot

g = sns.JointGrid(x="total_bill", y="tip", data=tips)
g = g.plot_joint(plt.scatter, color=".5", edgecolor="white")
g = g.plot_marginals(sns.distplot, kde=True, color=".5")

或者如果你想在每个边缘

上有不同的情节
g = sns.JointGrid(x="total_bill", y="tip", data=tips)
g = g.plot_joint(sns.regplot, color="m")
_ = g.ax_marg_x.hist(tips["total_bill"], color="b", alpha=.6,
                     bins=np.arange(0, 60, 5))
_ = g.ax_marg_y.hist(tips["tip"], color="r", alpha=.6,
                     orientation="horizontal",
                     bins=np.arange(0, 12, 1))

然后花了2秒的时间进行实验,确保你可以将自己的自定义绘图函数传递给marginals和jointPlot,并且必须设置一个断点来确定哪个参数确定了边缘图的方向

def customJoint(x,y,*args,**kwargs):
    plt.scatter(x,y,color='red')
def customMarginal(x,*args,**kwargs):
    sns.distplot(x,color='green', vertical=kwargs['vertical'])

g = sns.JointGrid(x="total_bill", y="tip", data=tips)
g = g.plot(customJoint, customMarginal)