某些matplotlib或seaborn函数需要大量时间进行计算,例如: kdeplot
。
我想创建plt.subplots(2, 3)
,将相同的kde图放到所有六个轴上,然后将其他东西单独添加到每个轴。当然,我不想计算6次kdeplot。
如何避免多次计算?
答案 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")
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)