Я хочу определить экстенты осей в PairGrids при их построении.Я знаю, что могу настроить их после построения графика, но я хочу отобразить гексбины на графики, которые будут деформированы, если я отрегулирую после факта. matplotlib.pyplot.hexbin принимает аргумент экстента, который позволяет мне определять экстенты во время построения.Я могу передать этот аргумент при использовании FacetGrid с двумя переменными.
Я хотел бы предоставить список экстентов для каждой переменной в фрейме данных pandas, чтобы я мог сравнивать графики по наборам данных, которые могут не иметь одинаковый диапазонзначений (например, iris
и iris_2
).
import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib.colors import LogNorm
iris = sns.load_dataset("iris")
# Create second dataset I'd like to compare, but has different range of values
iris_2 = iris.copy()
iris_2[iris_2.columns[0:4]] = iris_2[iris_2.columns[0:4]] + 2
def hexbin(x, y, **kws):
cmap = sns.light_palette(kws.pop("color"), as_cmap=True)
plt.hexbin(x, y, cmap=cmap, mincnt=1, **kws)
g = sns.FacetGrid(iris, col="species")
g = g.map(hexbin, 'sepal_width', 'sepal_length', norm=LogNorm(),
gridsize=10, extent=[1, 5, 4, 10])
Вот код, который я хотел бы изменить.
g = sns.PairGrid(iris, diag_sharey=False)
g.map_diag(sns.kdeplot, lw=3, legend=False, shade=True)
g.map_lower(hexbin, gridsize=10, norm=LogNorm())
g.map_upper(plt.scatter, s=3)
![enter image description here](https://i.stack.imgur.com/0YUBS.png)
При построении второго набора данных неясно, чем отличаются наборы данных, поскольку оси настраиваются для отдельных наборов данных.
g = sns.PairGrid(iris_2, diag_sharey=False)
g.map_diag(sns.kdeplot, lw=3, legend=False, shade=True)
g.map_lower(hexbin, gridsize=10, norm=LogNorm())
g.map_upper(plt.scatter, s=3)
![enter image description here](https://i.stack.imgur.com/fsGXA.png)
В моем конкретном случае идеальное решение может выглядеть как словарь с нужными экстентами для каждого столбца данных:
extent_dict = {'sepal_length': [4, 10], 'sepal_width': [2, 7],
'petal_length': [0, 10], 'petal_width': [0, 4.5]}