我正在使用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')
我想检测到图例与最右上角重叠并将其绘制在图表之外。