Что делает параметр point для графиков скрипки в matplotlib? - PullRequest
2 голосов
/ 24 июня 2019

Что происходит, когда параметр точек в matplotlib 'violinplot изменяется и когда это было бы полезно сделать?

points параметр участков скрипки определяется следующим образом.

баллов: скаляр, по умолчанию = 100

Определяет количество баллов для оценки каждой из гауссовских оценок плотности ядра в.

Axes.violinplot(self, dataset, positions=None, vert=True, widths=0.5, showmeans=False, showextrema=True, showmedians=False, points=100, bw_method=None, *, data=None)

Я вижу оченьнебольшое изменение на моих графиках, когда я изменю это.Почему это так?

1 Ответ

1 голос
/ 24 июня 2019

Согласно [официальным документам] (шахта второго акцента) (https://matplotlib.org/3.1.0/api/_as_gen/matplotlib.axes.Axes.violinplot.html)

баллов : скаляр, по умолчанию = 100 Определяет количество баллов дооцените каждую из гауссовских оценок плотности ядра в.

Итак, как показывает следующий пример (адаптированный из здесь ), эффект количества точек выделяется, когдавыбрано очень небольшое количество точек. Результат , конечно, также зависит от размера выборки. Попробуйте выбрать меньший размер выборки, например 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()

enter image description here

PS: Чтобы выделить точку дальше, рассмотрите только одно местоположение и три случая: 5, 10 и 50 точек, как предложено @ ImportanceOfBeingEarnest

pos = [1]
data = [np.random.normal(0, std, size=100) for std in pos]

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...