Seaborn swarmplot:获取点坐标

时间:2018-01-22 15:45:22

标签: python matplotlib seaborn

我正在使用seaborn的swarm方法绘制数据。在绘制绘图之后,我想要检索绘制点的(x,y) - 坐标。

我的申请是:我想在情节中添加一个图例,并自动(我有大量的情节......)决定是否在情节内部或外部显示图例。为此,我首先绘制内部的图例,获取其边界框,并检查是否有任何绘制的点与该边界框重叠。如果是这种情况,请用外面的图例重绘整个图。

是否可以检索绘制点的坐标?我尝试迭代轴的get_children(),但似乎还有其他艺术家,这些不是点,即使它不与任何数据点重叠,也会导致我的传说走到外面。

查看代码,我没有看到任何明显的方法,因为beeswarm()方法的坐标似乎没有存储在任何地方,但也许我错过了什么?

非常感谢,

的Lukas

修改:这是一个最小的例子:

test_data = pd.DataFrame([
    {'x': 1, 'y': 1.0, 'color': 1.0},
    {'x': 1, 'y': 2.0, 'color': 0.5},
    {'x': 1, 'y': 2.8, 'color': 0.25},
    {'x': 1, 'y': 4.0, 'color': 0.125},

    {'x': 2, 'y': 1.0, 'color': 1.0},
    {'x': 2, 'y': 2.0, 'color': 0.5},
    {'x': 2, 'y': 2.7, 'color': 0.25},
    {'x': 2, 'y': 4.0, 'color': 0.125},

    {'x': 3, 'y': 1.0, 'color': 1.0},
    {'x': 3, 'y': 2.0, 'color': 0.5},
    {'x': 3, 'y': 2.7, 'color': 0.25},
    {'x': 3, 'y': 4.0, 'color': 0.125},
])

p = sns.swarmplot(data=test_data, x='x', y='y', hue='color')
legend = p.legend(frameon=True)
legend.get_frame().set_fc('gray')

生成此图片: Plot with one point overlapping the legend

我想检测到图例与最右上角重叠并将其绘制在图表之外。

0 个答案:

没有答案