Seaborn PairGrid:pairplot 两个具有不同透明度的数据集

Seaborn PairGrid: pairplot two data set with different transparency

我想用 seaborn 库制作一个 PairGrid 图。

我有两个分类数据:一个训练集和一个目标点。

我想将单目标点绘制为不透明的,但是训练集中的样本应该是透明的。

我也想在较低的单元格中绘制单目标点。

这是我的代码和图像:

import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

data = pd.read_csv("data.csv")

g = sns.PairGrid(data, hue='type')
g.map_upper(sns.scatterplot, alpha=0.2, palette="husl")
g.map_lower(sns.kdeplot, lw=3, palette="husl")
g.map_diag(sns.kdeplot, lw=3, palette="husl")
g.add_legend()

plt.show()

而 data.csv 如下所示:

         logP    tPSA       QED  HBA  HBD          type
0    -2.50000  200.00  0.300000    8    1      Target 1
1     1.68070   87.31  0.896898    3    2  Training set
2     3.72930   44.12  0.862259    4    0  Training set
3     2.29702   91.68  0.701022    6    3  Training set
4    -2.21310  102.28  0.646083    8    2  Training set

您可以重新分配部分绘图后使用的数据框。例如。 g.data = data[data['type'] == 'Target 1']。因此,您可以先绘制训练数据集,更改 g.data,然后使用其他参数绘制目标。

以下示例假设将鸢尾花数据集的第一行作为训练数据。添加了自定义图例(这可能会引发应忽略的警告)。

import matplotlib.pyplot as plt
from matplotlib.lines import Line2D
import seaborn as sns

iris = sns.load_dataset('iris')

g = sns.PairGrid(iris)
color_for_trainingset = 'paleturquoise'
# color_for_trainingset = sns.color_palette('husl', 2) [-1] # this is the color from the question
g.map_upper(sns.scatterplot, alpha=0.2, color=color_for_trainingset)
g.map_lower(sns.kdeplot, color=color_for_trainingset)
g.map_diag(sns.kdeplot, lw=3, color=color_for_trainingset)

g.data = iris.iloc[:1]
# g.data = data[data['type'] == 'Target 1']
g.map_upper(sns.scatterplot, alpha=1, color='red')
g.map_lower(sns.scatterplot, alpha=1, color='red', zorder=3)

handles = [Line2D([], [], color='red', ls='', marker='o', label='target'),
           Line2D([], [], color=color_for_trainingset, lw=3, label='training set')]
g.add_legend(handles=handles)

plt.show()