在matplotlib图形或子图内绘制海洋配对图

时间:2018-12-18 08:06:07

标签: python matplotlib seaborn subplot

-> 帖子第二部分中包含的答案代码

我有一个想将其绘制在matplotlib子图中的seaborn偶对图,但是我不知道如何实现它。

例如,假设我有以下对图:

import seaborn as sns; sns.set(style="ticks", color_codes=True)
iris = sns.load_dataset("iris")
g = sns.pairplot(iris)

我有一个matplotlib图,如下所示:

fig = plt.figure()
ax = fig.add_subplot(111)

我的目标是在图形或轴内绘制seaborn对图。 例如,类似于以下内容之一:

g.fig = fig
g.axes = ax

感谢任何提示,谢谢!!

================================================ ==================

经过大量研究和反复尝试,我终于弄清楚了。 我将代码发布如下:

假设您有一个像这样的对图:

import seaborn as sns; sns.set(style="ticks", color_codes=True)
iris = sns.load_dataset("iris")
g = sns.pairplot(iris, diag_kind = 'kde')

要模拟它在matplotlib中的绘制方式,可以使用以下代码:

pp_rows = len(g.axes)
pp_cols = len(g.axes[0])

fig, axs = plt.subplots(pp_rows, pp_cols, figsize=(12,12))

xlabels, ylabels = [], []

for ax in g.axes[-1,:]:
    xlabel = ax.xaxis.get_label_text()
    xlabels.append(xlabel)
for ax in g.axes[:,0]:
    ylabel = ax.yaxis.get_label_text()
    ylabels.append(ylabel)

for i in range(len(xlabels)):
    for j in range(len(ylabels)):
        if i != j:
            # Diagnol
            sns.regplot(x=xlabels[i], y=ylabels[j], data=iris, scatter=True, fit_reg=False, ax=axs[j ,i])
        else:
            sns.kdeplot(iris[xlabels[i]], ax=axs[j ,i])

        # Fix plot labels
        if i == 0:
            axs[j ,i].set_xlabel("")
            axs[j ,i].set_ylabel(ylabels[j])
        elif j == len(xlabels)-1:
            axs[j ,i].set_xlabel(xlabels[i])
            axs[j ,i].set_ylabel("")
        else:
            axs[j ,i].set_xlabel("")
            axs[j ,i].set_ylabel("")

0 个答案:

没有答案