首页 > 解决方案 > 在 seaborn 中突出显示联合图的一部分

问题描述

我在 seaborn 中生成了一些具有专业外观的人物。

例如:

import seaborn as sns
sns.set_style('white')
sns.set_context('paper', font_scale=2)
sns.set_style('ticks', {'axes.edgecolor': '0',  
                        'xtick.color': '0',
                        'ytick.color': '0'})

g = sns.jointplot(x=np.random.rand(1000,3), y=np.random.rand(1000,3),
                   marginal_kws=dict(bins=50, rug=True,color="k"),
                   annot_kws=dict(stat="r"),
                   s=40, edgecolor="k",color='w', linewidth=1)
sns.despine(offset=5, trim=True)
g.fig.set_figheight(12)
g.fig.set_figwidth(12)

给出作为输出: 在此处输入图像描述

现在,我想突出显示图中的一部分。

我希望顶部直方图在某个范围内具有不同的颜色,例如 x<0.25 的所有条形图都应该是红色的,并且散点图中的对应点也是如此。

如何获得它?

我可以使用原始数据的子集重复绘图操作,但直方图缩放会有所不同。

标签: pythonplotseaborn

解决方案


注意:这不是一个完整的答案
对于散点,您可以注释小于给定值的点:

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

df = pd.DataFrame(columns=("x", "y", "x_cor_to_ann"))
df['x'] = pd.Series(np.random.randn(10))
df['y'] = pd.Series(np.random.randn(10))
df['x_cor_to_ann'] = df['x'] <= 0.25
print(df)

g = sns.jointplot("x", "y", data=df, kind="reg",
                  marginal_kws=dict(bins=50, rug=True,color="k"),
                  annot_kws=dict(stat="r"),
                   color='b')

highlight = df[df['x']<=0.25]

def annotate(data_row):
    r = data_row[1]
    plt.gca().annotate(data_row[0], xy=(r["x"], r["y"]), 
            xytext=(2,2) , textcoords ="offset points")

for data_row in highlight.iterrows():
    annotate(data_row)

plt.show()
sns.despine(offset=5, trim=True)
g.fig.set_figheight(12)
g.fig.set_figwidth(12)

因此,如果您的数据框如下所示:

      x         y         x_cor_to_ann
0  1.180725  0.368682         False
1  1.816001  0.104237         False
2  1.074462  1.253019         False
3 -0.219031 -0.670320          True
4  0.402527 -0.899265         False
5 -0.960773  2.942559          True
6  0.067588  0.508284          True
7 -0.051982 -0.194170          True
8 -0.016429  0.101746          True
9  1.607429  0.736233         False

哪个应该是这样的: 哪个应该注释行,其余的没有注释。您当然可以使用注释而不是注释索引号来做更多的事情。 使用直方图,我不知道该怎么做,抱歉:(。seaborn doc 也无济于事。在此处输入图像描述
x<=0.25


推荐阅读