我试图在seaborn中进行绘制,以便色相基于一列定义我的数据点,如果另一列的值为1,则该值应覆盖色相。

我正在用K均值进行异常检测,所以我绘制了不同聚类的色相,这很好,但是现在在同一图中,如果该行的“异常”列= 1,那么该数据点我想显示红色的。这可能吗?

df = pd.DataFrame({'var1': [1, 2, 3, 4, 5, 6, 7],
                    'var2': [100, 200, 300, 400, 500, 600, 700],
                    'cluster': [0,0,0,0,0,1,1], 'anomalies':[1,1,1,0,0,0,0]})
sns.scatterplot(x='var1', y='var2', hue='cluster', data=df)


例如。在上面的代码中,我应该能够根据label1值传递自定义颜色
预期:我应该能够在一个列的基础上绘制色相,并在另一列的基础上绘制自定义颜色

编辑:由于@ImportanceOfBeingErnest询问使用seaborn而不是matplotlib的原因,由于地块较干净,所以我想使用seaborn而不是matplotlib。例如。
python - 在Seaborn中,特定颜色是否可以覆盖已经基于另一列的色相?-LMLPHP

python - 在Seaborn中,特定颜色是否可以覆盖已经基于另一列的色相?-LMLPHP

最佳答案

如果要使用matplotlib,它可能看起来像这样。为异常创建一个散布,为其余部分创建一个散布。

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

df = pd.DataFrame({'var1': [1, 2, 3, 4, 5, 6, 7],
                    'var2': [100, 200, 300, 400, 500, 600, 700],
                    'cluster': [0,0,0,0,0,1,1], 'anomalies':[1,1,1,0,0,0,0]})

plt.style.use("seaborn-whitegrid")
cmap = sns.cubehelix_palette(256, as_cmap=True)

sc1 = plt.scatter(x='var1', y='var2', c='cluster', data=df[df['anomalies'] == 0], cmap=cmap)
sc2 = plt.scatter(x='var1', y='var2', color="red", data=df[df['anomalies'] == 1])

h, l = sc1.legend_elements()
plt.legend(h+[sc2], l+["anomalies"])
plt.show()


python - 在Seaborn中,特定颜色是否可以覆盖已经基于另一列的色相?-LMLPHP

08-19 01:55