Как я могу расширить пределы оценки для двумерного seaborn kdeplot?

#python #matplotlib #seaborn

#python #matplotlib #seaborn

Вопрос:

Я хочу нарисовать один уровень так называемых «iso-пропорций» seaborn kdeplot (см. Документацию) на сетке по моему выбору. Однако функция, похоже, привязывает контур к сетке, которая, по ее мнению, достаточна для характеристики оценки плотности. Есть ли какой-либо способ принудительно выполнить оценку на более крупной сетке? Изменение порядка, где plt.xlim и plt.ylim вызываются, не решает проблему.

Вот пример использования выборок, взятых из двумерного кругового нормального распределения.

 import scipy.stats
import seaborn as sns
import matplotlib as mpl
import matplotlib.pyplot as plt

n = 20000
std_norm_2d = scipy.stats.multivariate_normal(mean=(0,0), seed=42)
samples = std_norm_2d.rvs(size=n, random_state=42)

with mpl.style.context('bmh'):
    plt.figure(dpi=100)
    plt.axis('scaled')
    plt.xlim(-6, 6)
    plt.ylim(-6, 6)
    sns.kdeplot(x=samples[:,0], y=samples[:,1], fill=False, levels=[1e-6])
    plt.show()
  

kdeplot с обрезанным контуром

Для полноты, вот результат без настройки масштабирования оси или ограничений.

kdeplot без корректировки оси

Ответ №1:

Это не особенно очевидно, но вы можете увеличить cut параметр, который определяет, насколько далеко за пределы самых крайних точек простирается сетка оценки (единицы измерения соответствуют пропускной способности ядра сглаживания).

например

 sns.kdeplot(x=samples[:,0], y=samples[:,1], fill=False, levels=[1e-6], cut=10)
  

Для вашего варианта использования (рисование одного незаполненного контура) matplotlib автоматически масштабирует оси правильно. В других ситуациях вы также можете захотеть добавить clip аргументы (в единицах данных) для установки ограничений сетки.