#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()
Для полноты, вот результат без настройки масштабирования оси или ограничений.
Ответ №1:
Это не особенно очевидно, но вы можете увеличить cut
параметр, который определяет, насколько далеко за пределы самых крайних точек простирается сетка оценки (единицы измерения соответствуют пропускной способности ядра сглаживания).
например
sns.kdeplot(x=samples[:,0], y=samples[:,1], fill=False, levels=[1e-6], cut=10)
Для вашего варианта использования (рисование одного незаполненного контура) matplotlib автоматически масштабирует оси правильно. В других ситуациях вы также можете захотеть добавить clip
аргументы (в единицах данных) для установки ограничений сетки.