从seaborn swarmplot获取绘制点的跨度

发布于 2021-01-29 14:10:04

我有以下数据:

import pandas as pd
import numpy as np

# Generate dummy data.
a = np.random.random(75)
b = np.random.random(75) - 0.6
c = np.random.random(75) + 0.75

# Collate into a DataFrame
df = pd.DataFrame({'a': a, 'b': b, 'c': c}) 
df.columns = [list(['WT', 'MUT', 'WTxMUT']), list(['Parent', 'Parent', 'Offspring'])]
df.columns.names = ['Genotype', 'Status']
df_melt = pd.melt(df)

我使用以下代码将其绘制在seaborn中:

import seaborn as sb
sb.swarmplot(data = df_melt, x = "Status", y = "value", hue = "Genotype")

链接到Swarmplot输出

如何获得每个组的X跨度?例如,父组的swarmplot的水平跨度的范围是多少?

关注者
0
被浏览
124
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您可以从中collections创建的信息swarmplot

    swarmplot实际返回matplotlibAxes实例,然后从那里可以找到PathCollections它创建的实例。要获取职位,我们可以使用.get_offsets()

    这是您的示例,进行了修改以查找并打印群限制,然后使用它们在群周围绘制方框。

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    import seaborn as sb
    from matplotlib.patches import Rectangle
    
    # Generate dummy data.
    a = np.random.random(75)
    b = np.random.random(75) - 0.6
    c = np.random.random(75) + 0.75
    
    # Collate into a DataFrame
    df = pd.DataFrame({'a': a, 'b': b, 'c': c}) 
    df.columns = [list(['WT', 'MUT', 'WTxMUT']), list(['Parent', 'Parent', 'Offspring'])]
    df.columns.names = ['Genotype', 'Status']
    df_melt = pd.melt(df)
    
    ax = sb.swarmplot(data = df_melt, x = "Status", y = "value", hue = "Genotype")
    
    def getdatalim(coll):
        x,y = np.array(coll.get_offsets()).T
        try:
            print 'xmin={}, xmax={}, ymin={}, ymax={}'.format(
                    x.min(), x.max(), y.min(), y.max())
            rect = Rectangle((x.min(),y.min()),x.ptp(),y.ptp(),edgecolor='k',facecolor='None',lw=3)
            ax.add_patch(rect)
        except ValueError:
            pass
    
    getdatalim(ax.collections[0]) # "Parent"
    getdatalim(ax.collections[1]) # "Offspring"
    
    plt.show()
    

    打印:

    xmin=-0.107313729132, xmax=0.10661092707, ymin=-0.598534246847, ymax=0.980441247759
    xmin=0.942829146473, xmax=1.06105941656, ymin=0.761277608688, ymax=1.74729717464
    

    这是图:

    在此处输入图片说明



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看