我有一个seaborn.catplot
,如下所示:
我所要做的是用下面的规则来突出图形中的差异:
- 如果A-B〉4,则将其着色为绿色
- 如果A-B〈-1,则将其着色为红色
- 如果A-B =〈2=且〉=0,则将其着色为蓝色
我期待着产生类似于下面的图像:
这里有一个MRE:
# Stack Overflow Example
import numpy as np, pandas as pd, seaborn as sns
from random import choice
from string import ascii_lowercase, digits
chars = ascii_lowercase + digits
lst = [''.join(choice(chars) for _ in range(2)) for _ in range(100)]
np.random.seed(8)
t = pd.DataFrame(
{
'Key': [''.join(choice(chars) for _ in range(2)) for _ in range(5)]*2,
'Value': np.random.uniform(low=1, high=10, size=(10,)),
'Type': ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B']
}
)
ax = sns.catplot(data=t, x='Value', y='Key', hue='Type', palette="dark").set(title="Stack Overflow Help Me")
plt.show()
我认为需要在关注点周围画一个省略号,我已经研究了一些问题:
- Creating a Confidence Ellipses in a sccatterplot using matplotlib
- plot ellipse in a seaborn scatter plot
但是似乎没有人特别针对catplot
,或者定制它们的颜色和规则来这样做。
我怎样才能用我的玩具例子达到预期的效果?
1条答案
按热度按时间ffscu2ro1#
你可以围绕A和B的中点创建椭圆,使用A和B之间的距离,加上一些填充,作为宽度。高度应该比1小一点。
要获得完整的轮廓和透明的内部颜色,可以使用
to_rgba()
。将zorder设置为一个较小的数字会将椭圆放置在散布点后面。sns.scatterplot
是sns.catplot
的轴级等效项,在只有一个子图时更易于使用。使
Key
列的类型为pd.Categorical
,可以在y位置和标签之间给出固定的关系。