-> 帖子第二部分中包含的答案代码
我有一个想将其绘制在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("")