如何更改 seaborn 对图中绘图元素的 z 顺序

问题描述 投票:0回答:2

这是一个片段,用于重现我的示例图像:

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

np.random.seed(42)
df = pd.DataFrame(np.random.rand(10,2), columns=['x', 'y'])
df['label'] = ['cat', 'mouse', 'dog', 'mouse', 'cat', 'cat', 'mouse', 'mouse','dog', 'cat']
sns.pairplot(df, hue='label');

它生成以下seaborn对图,以及一些虚拟数据:

在右上图中,“狗”类别的一个标记位于“鼠标”类别的重叠标记下方。

我可以以某种方式更改散点图标记的 z 顺序,以便“狗”类别的所有标记在顶部最清晰可见吗?

编辑:我已经尝试过

hue_order=['mouse', 'cat', 'dog']
hue_order=['dog', 'mouse', 'cat']
,但它们只影响图例和颜色中的顺序。不是散点图中标记的 z 顺序。

python pandas seaborn z-order pairplot
2个回答
4
投票
  • 这个答案提供了我 2022 年 1 月 7 日的评论的完整解释。
  • 这些点按照它们在数据框中出现的顺序绘制。您可以更改该顺序,例如通过
    pd.concat([df[df['label'] != 'dog'], df[df['label'] == 'dog']])
  • 数据框中的顺序还设置图例中标签的默认顺序。进一步注意,在未来的seaborn版本中,这种行为可能会改变。
import pandas as pd
import numpy as np
import seaborn as sns

np.random.seed(42)
df = pd.DataFrame(np.random.rand(10, 2), columns=['x', 'y'])
df['label'] = ['cat', 'mouse', 'dog', 'mouse', 'cat', 'cat', 'mouse', 'mouse', 'dog', 'cat']
sns.pairplot(pd.concat([df[df['label'] != 'dog'], df[df['label'] == 'dog']]), hue='label')


0
投票

这些点是按照 @JohanC 在问题评论和其他答案中遇到的顺序绘制的。连接是一种选择,但在大多数情况下,对数据帧进行排序可能有效。

df.sort_values(by=['foo', 'bar'], inplace=True)

如果您希望保留原始数据帧顺序,请从

inplace
函数中删除
sort_values
参数,并将返回的排序数据帧分配给新变量。

© www.soinside.com 2019 - 2024. All rights reserved.