我有以下代码:

import seaborn as sns
import pandas as pd
import numpy as np

Data = pd.DataFrame(columns=['x1','x2','x3','label'])
for i in range(100):
    Data.loc[len(Data.index)] = [np.random.rand(),np.random.rand(),np.random.rand(),'1']

Data.loc[len(Data.index)] = [np.random.rand(),np.random.rand(),np.random.rand(),'2']
Data.loc[len(Data.index)] = [np.random.rand(),np.random.rand(),np.random.rand(),'3']
Data.loc[len(Data.index)] = [np.random.rand(),np.random.rand(),np.random.rand(),'4']
Data.loc[len(Data.index)] = [np.random.rand(),np.random.rand(),np.random.rand(),'5']

sns.pairplot(Data,vars=['x1','x2','x3'],hue='label',markers=['o','s','s','s','s'],corner=True)

Which gives the following output: enter image description here

我想只在方形标记周围加上黑色边框,以使它们更明显,但我不知道如何做到这一点.

我试着补充说:

grid_kws={fillstyles:['none','full','full','full','full']}

作为sns.pairploy的参数,但我只得到了以下错误:

Traceback (most recent call last):

  File ~/anaconda3/lib/python3.10/site-packages/spyder_kernels/py3compat.py:356 in compat_exec
    exec(code, globals, locals)

  File ~/Dokument/Python/MasterProjectCoCalc/SNmasterproject/untitled0.py:21
    sns.pairplot(Data,vars=['x1','x2','x3'],hue='label',markers=['o','s','s','s','s'],corner=True,grid_kws={fillstyles:['none','full','full','full','full']})

NameError: name 'fillstyles' is not defined

我还试图补充说:

plot_kws={'edgecolor':'black'}

to the sns.pairplot function and then I got enter image description here

但现在所有的点都有黑色边框.如何在正方形标记周围只有黑色边框?

推荐答案

散点存储在ax.collections[0]中.为了避免后期色调值的 colored颜色 总是在顶部,seborn将点保持在它们在镜框中出现的顺序.您可以使用.set_edgecolors()设置每个点的边缘 colored颜色 .

对于图例,点存储在其句柄中为line个对象,您可以通过.set_markeredgecolor(...)更改

下面是代码的外观:

import seaborn as sns
import pandas as pd
import numpy as np

Data = pd.DataFrame(columns=['x1', 'x2', 'x3', 'label'])
for i in range(100):
    Data.loc[len(Data.index)] = [np.random.rand(), np.random.rand(), np.random.rand(), '1']
Data.loc[len(Data.index)] = [np.random.rand(), np.random.rand(), np.random.rand(), '2']
Data.loc[len(Data.index)] = [np.random.rand(), np.random.rand(), np.random.rand(), '3']
Data.loc[len(Data.index)] = [np.random.rand(), np.random.rand(), np.random.rand(), '4']
Data.loc[len(Data.index)] = [np.random.rand(), np.random.rand(), np.random.rand(), '5']

g = sns.pairplot(Data, vars=['x1', 'x2', 'x3'], hue='label', markers=['o', 's', 's', 's', 's'], corner=True)

edge_colors = ['none' if l == '1' else 'k' for l in Data['label']]
for ax in g.axes.flat:
    if ax is not None and len(ax. Collections) > 0:
        ax.collections[0].set_edgecolors(edge_colors)
for h in g.legend.legend_handles[1:]:
    h.set_markeredgecolor('k')

sns.pairplot change individual marker edge colors

Python相关问答推荐

如何根据日期和时间将状态更新为已过期或活动?

如何使用scipy从频谱图中回归多个高斯峰?

使用FASTCGI在IIS上运行Django频道

由于NEP 50,向uint 8添加-256的代码是否会在numpy 2中失败?

'discord.ext. commanders.cog没有属性监听器'

_repr_html_实现自定义__getattr_时未显示

Pandas 都是(),但有一个门槛

如何获取numpy数组的特定索引值?

在np数组上实现无重叠的二维滑动窗口

pandas:排序多级列

使用NeuralProphet绘制置信区间时出错

转换为浮点,pandas字符串列,混合千和十进制分隔符

如何从列表框中 Select 而不出错?

如何使用使用来自其他列的值的公式更新一个rabrame列?

导入错误:无法导入名称';操作';

交替字符串位置的正则表达式

我对这个简单的异步者的例子有什么错误的理解吗?

从嵌套极轴列的列表中删除元素

用来自另一个数据框的列特定标量划分Polars数据框中的每一列,

在任何要保留的字段中添加引号的文件,就像在Pandas 中一样