seaborn двухугольная пара - PullRequest
       31

seaborn двухугольная пара

1 голос
/ 04 августа 2020

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

import seaborn as sns; sns.set(style="ticks", color_codes=True)
iris = sns.load_dataset("iris")
g = sns.pairplot(iris, hue="species", corner=True)

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

import seaborn as sns; sns.set(style="ticks", color_codes=True)
iris = sns.load_dataset("iris")
iris['species'] = iris['species'].map({'setosa': 0, 
                                   'versicolor': 1, 
                                   'virginica': 2})

sns.pairplot(iris, hue="species", corner=True)
sns.pairplot(iris, hue="petal_length", corner=True)

Есть ли способ построить график на верхнем треугольнике ? Или присоединиться к двум разным парам?

Заранее спасибо

1 Ответ

1 голос
/ 05 августа 2020

Нет возможности построить график на верхнем треугольнике. Однако вы можете сделать два графика, минимум один из них с corner=False, а затем добавить нижний треугольник и диагональные оси из углового графика к полному графику. Однако это имеет смысл только в том случае, если параметры парного графика для обоих графиков идентичны, в противном случае (как в вашем примере) метки осей и легенда будут действительны только для одного треугольника (если вы вручную не добавите вторую легенду и правую и верхнюю оси в верхний треугольник suplots, но в этом случае, вероятно, будет легче свернуть свой собственный с самого начала).

Пример (нижний треугольник и диагональ для нечетных строк iris, верхний треугольник для четных строк) :

import matplotlib.pyplot as plt
import seaborn as sns; sns.set(style="ticks", color_codes=True)
iris = sns.load_dataset("iris")

pg1 = sns.pairplot(iris[1::2], hue="species", corner=True)
pg2 = sns.pairplot(iris[::2], hue="species", corner=False, diag_kind=None))

# remove lower triangle and diagonal from figure 2
for ax in pg2.fig.get_axes():
    if ax.get_geometry()[2] in [1,5,6,9,10,11,13,14,15,16]:
        ax.remove()

# add all axes from figure 1 (lower triangle and diagonal) to figure 2
for ax in pg1.fig.get_axes():
    ax.figure = pg2.fig # in the next step we can only add axes from the same figure
    pg2.fig.add_axes(ax)

# close figure 1 which is not needed anymore    
plt.close(pg1.fig)

введите описание изображения здесь

...