在多个轴上绘制预先计算的图表

时间:2018-03-15 08:35:45

标签: python matplotlib plot seaborn

某些matplotlib或seaborn函数需要大量时间进行计算,例如: kdeplot

我想创建plt.subplots(2, 3),将相同的kde图放到所有六个轴上,然后将其他东西单独添加到每个轴。当然,我不想计算6次kdeplot。

如何避免多次计算?

1 个答案:

答案 0 :(得分:1)

了解更多关于您正在使用的数据类型以及生成的kdeplot将会有所帮助。基本上,seaborn是一个帮助图书馆来制作漂亮的地块,但它依赖于其他图书馆来完成繁重的工作。因此,我认为解决问题的最简单方法是弄清楚seaborn如何计算KDE,自己进行计算,然后在子图中绘制结果。

例如:

mean, cov = [0, 2], [(1, .5), (.5, 1)]
x, y = np.random.multivariate_normal(mean, cov, size=50).T
ax = sns.kdeplot(x, shade=True, color="r")

enter image description here

Looking at the code for kdeplot(),我看到它使用statsmodel(或scipy)来计算KDE。它甚至使用了一个小辅助函数,我可以使用它:

fig, axs = plt.subplots(2, 3)

# adjust parameters as you would calling sns.kdeplot
kde_x,kde_y = sns.distributions._statsmodels_univariate_kde(x, kernel="gau",
            bw="scott", gridsize=100, cut=3, clip=(-np.inf, np.inf), 
            cumulative=False)

for ax in axs.flatten():
    # adjust parameters to match your desired output
    ax.plot(kde_x,kde_y)
    ax.fill_between(kde_x, 0, kde_y, alpha=0.25, clip_on=True, zorder=1)

enter image description here