Я новичок в seaborn
, и в настоящее время я играю с функциями pairplot
... Со следующими
seaborn.pairplot(data,
hue = "Class",
diag_king = "hist",
diag_kws = {'alpha'=0.5}
)
Я могу добиться большей части того, что хочу: сетка точечных диаграмм из моего pandas
фрейма данных data
, с отдельными распределениями по столбцу Class
и полупрозрачными гистограммами по диагонали.
Я понял, что, передав bin=[...]
в diag_kws
, я могу заставить все диагональные участки принять этот биннинг, но я бы хотел, чтобы каждый столбец моего фрейма данных брал свой биннинг из выделенного словаря (с ключами имена столбцов).
Можно ли добиться этого с помощью diag_kws
? Или мне нужно получить доступ к каждому из диагональных графиков отдельно после вызова pairplot
и перекомпоновать их вручную? Какой самый эффективный способ?
@ImportanceOfBeingErnest Спасибо за предложение! Я вижу, как я могу использовать методы pyplot
с map_diag
, но как мне создать пользовательскую функцию, которая обращается к имени отображаемой переменной?
Я думаю, что нет эквивалента FacetGrid
map_dataframe
для PairGrid
, верно? В этом случае нужно проявить изобретательность. Например. количество раз, когда функция вызывается, указывает, для каких осей она работает в данный момент, или текущее положение осей в сетке... Однако я ничего из этого не пробовал.
Хорошо, после вызова g = seaborn.pairplot(...)
я могу зациклиться на диагональных элементах g.axes
и попробовать установить там бины... Это кажется слишком хакерским, но я думаю, что это нужно сделать... :)
Ммм, я не это имел в виду, но это тоже возможно, конечно. Я представил свое предложение в качестве ответа ниже.
PairGrid
предлагает map_diag
, который можно использовать для сопоставления пользовательской функции, которая изменяет параметры при каждом вызове. Это может выглядеть так. Имейте в виду, что нужно позаботиться о порядке (через аргумент vars
), чтобы убедиться, что применяются правильные параметры.
import matplotlib.pyplot as plt
import seaborn as sns
iris = sns.load_dataset("iris", cache=True)
col_list = ['petal_length', 'petal_width', 'sepal_length', 'sepal_width']
cols = iter(col_list)
bins = {'sepal_length' : 10, 'sepal_width' : 5,
'petal_length' : 35, 'petal_width' : 12}
def myhist(x, **kwargs):
b = bins[next(cols)]
plt.text(0.5,0.9, f"bins = {b}", ha = "center",
transform=plt.gca().transAxes)
plt.hist(x, bins=b, **kwargs)
g = sns.PairGrid(iris, vars=col_list)
g = g.map_diag(myhist)
g = g.map_offdiag(plt.scatter)
plt.show()
Я использую pairplot
, как установить оси для каждого графика? У меня есть график 4 на 4 с разными значениями диапазона.
PairGrid
предлагаетmap_diag
, который можно использовать для сопоставления пользовательской функции, которая изменяет параметры при каждом вызове.