首页 > 解决方案 > 为什么 seaborn pairplot 中的数据会变白?

问题描述

以下代码从 csv 文件中读取数据。

然后根据 column 的值范围将supplyHue()离散值分配给column 。对于下面配对图中的直方图数值分布可能会有所帮助。caa

那么supplyHue()基本上做什么:将列的数据a放入箱中,以便可以将它们分配给绘图的不同颜色/色调值。

稍后,seaborn pairplot 完成。

根据我缩小绘图的程度,绘图左侧的颜色会“变白”:画布不是纯粉红色,而是非常明亮,更多的数据点相互绘制。这也很奇怪,因为对于(沿 y 轴的位移)a的所有值的某个值,相同的颜色应该是正确的。b

如果我放大,这种效果几乎完全消失。

我该怎么做才能避免这种颜色变亮?

编码:

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

df = pd.read_csv(r"https://pastebin.com/raw/7ez3WQzW")

def supplyHue(x):
    if x < 1:
        myReturn = 1
    elif x < 2:
        myReturn = 2
    elif x < 4:
        myReturn = 4
    elif x < 6:
        myReturn = 6
    elif x < 10:
        myReturn = 10
    elif x < 15:
        myReturn = 15
    elif x < 18:
        myReturn = 18
    else:
        myReturn = 20
    return myReturn

df['c'] = df.a.apply(lambda x: supplyHue(x))

g = sns.pairplot(
    df,
    corner=True,
    vars=['a', 'b'],
    plot_kws=dict(
        hue=df['c'],
    ),
)
g.add_legend()
g.axes[1][0].grid()
plt.show()

缩小:

变白了

放大-或多或少还可以:

在此处输入图像描述

标签: pythonmatplotlibseaborn

解决方案


问题是edgecolor标记的,传递edgecolor='None'给子图

g = sns.pairplot(
    df,
    corner=True,
    vars=['a', 'b'],
    plot_kws=dict(
        hue=df['c'],
        edgecolor='None',
    ),
)

前:

原来的

后:

没有边缘颜色


推荐阅读