更改matplotlib
的{{1}}中的points参数会什么时候发生?
violinplot
参数定义如下。
points:标量,默认= 100
定义评估每个高斯核密度估计值的点数。
points
更改图表后,我看到的图表变化很小。为什么会这样呢?
答案 0 :(得分:1)
根据[官方文档](第二重重点)(https://matplotlib.org/3.1.0/api/_as_gen/matplotlib.axes.Axes.violinplot.html)
点:标量,默认= 100 定义评估每个高斯核密度估计值的点数。
因此,如下面的示例(改编自here所示)所示,当选择很少的点数时,将突出显示点数的影响。当然,结果 还取决于样本量。尝试选择较小的样本大小,例如size=5
,然后在下面运行相同的代码。随着点数的增加,密度估算的平滑度自然会提高。在一些截止点上,这需要进行收敛性测试,您不会看到任何明显的影响。
import numpy as np
import matplotlib.pyplot as plt
# Fixing random state for reproducibility
np.random.seed(19680801)
fs = 10 # fontsize
pos = [1, 2, 4, 5, 7, 8]
data = [np.random.normal(0, std, size=100) for std in pos]
fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(10, 3))
axes[0].violinplot(data, pos, points=2, widths=1,
showmeans=True, showextrema=True, showmedians=True)
axes[0].set_title('Custom violinplot 1', fontsize=fs)
axes[1].violinplot(data, pos, points=5, widths=1,
showmeans=True, showextrema=True, showmedians=True,
bw_method='silverman')
axes[1].set_title('Custom violinplot 2', fontsize=fs)
axes[2].violinplot(data, pos, points=100, widths=1,
showmeans=True, showextrema=True, showmedians=True,
bw_method='silverman')
axes[2].set_title('Custom violinplot 2', fontsize=fs)
for ax in axes.flat:
ax.set_yticklabels([])
plt.tight_layout()
P.S:要进一步强调这一点,请考虑一个位置和三种情况:@ImportanceOfBeingEarnest建议的5、10和50点
pos = [1]
data = [np.random.normal(0, std, size=100) for std in pos]