如何使用 matplotlib 在函数之上绘制直方图?
How do I plot histograms on top of a function with matplotlib?
希望你能从图中看到,我有'x'的一整套功能。对于每个输入点,都有这些函数的分布,即平均值 (AVG) 和方差 (VAR)。如果可能的话,我想使用 matplotlib 在函数图的顶部绘制直方图,如图像右侧所示,但是如何?
您可以使用 scipy.stats.gausian_kde
计算核密度估计并将其垂直绘制。
下面是一些使用 20 条曲线的示例代码:
from matplotlib import pyplot as plt
import numpy as np
from scipy.stats import gaussian_kde
N = 100
K = 20
ys = np.random.normal(0.1, 1, (N, K)).cumsum(axis=0)
ys -= ys.min(axis=0, keepdims=True)
x = np.arange(N)
plt.plot(x, ys, color='cornflowerblue', alpha=0.2)
plt.plot(x, ys.mean(axis=1), color='navy', lw=3, label='mean y')
for i in range(10, len(x), 20):
yi = ys[i, :]
ymin, ymax = yi.min(), yi.max()
y_range = ymax - ymin
ymin -= y_range * 0.1
ymax += y_range * 0.1
kde = gaussian_kde(yi, bw_method=y_range / 100)
plt.vlines(x[i], ymin, ymax, ls=':', color='black')
y = np.linspace(ymin, ymax, 200)
kde_y = kde(y)
kde_y *= - 10 / kde(y).max()
kde_y += x[i]
plt.plot(kde_y, y, color='black')
plt.fill_betweenx(y, x[i], kde_y, color='black', alpha=.2)
plt.xticks(x[::10])
plt.show()
希望你能从图中看到,我有'x'的一整套功能。对于每个输入点,都有这些函数的分布,即平均值 (AVG) 和方差 (VAR)。如果可能的话,我想使用 matplotlib 在函数图的顶部绘制直方图,如图像右侧所示,但是如何?
您可以使用 scipy.stats.gausian_kde
计算核密度估计并将其垂直绘制。
下面是一些使用 20 条曲线的示例代码:
from matplotlib import pyplot as plt
import numpy as np
from scipy.stats import gaussian_kde
N = 100
K = 20
ys = np.random.normal(0.1, 1, (N, K)).cumsum(axis=0)
ys -= ys.min(axis=0, keepdims=True)
x = np.arange(N)
plt.plot(x, ys, color='cornflowerblue', alpha=0.2)
plt.plot(x, ys.mean(axis=1), color='navy', lw=3, label='mean y')
for i in range(10, len(x), 20):
yi = ys[i, :]
ymin, ymax = yi.min(), yi.max()
y_range = ymax - ymin
ymin -= y_range * 0.1
ymax += y_range * 0.1
kde = gaussian_kde(yi, bw_method=y_range / 100)
plt.vlines(x[i], ymin, ymax, ls=':', color='black')
y = np.linspace(ymin, ymax, 200)
kde_y = kde(y)
kde_y *= - 10 / kde(y).max()
kde_y += x[i]
plt.plot(kde_y, y, color='black')
plt.fill_betweenx(y, x[i], kde_y, color='black', alpha=.2)
plt.xticks(x[::10])
plt.show()