如果我用 matplotlib 绘制散点图:
plt.scatter(randn(100),randn(100))
# set x, y lims
plt.xlim([...])
plt.ylim([...])
我想用指向它的箭头和标签来注释给定点 (x, y)
。我知道这可以用 annotate
来完成,但我希望箭头及其标签“最佳”放置的方式是,如果可能(给定当前轴刻度/限制)箭头和标签不与其他点重叠。例如,如果你想标记一个离群点。有没有办法做到这一点?它不一定是完美的,而只是箭头/标签的智能放置,仅给出要标记的点的 (x,y)
坐标。谢谢。
原文由 user248237 发布,翻译遵循 CC BY-SA 4.0 许可协议
基本上,不,没有。
处理放置与此类似的地图标签的布局引擎非常复杂,超出了 matplotlib 的范围。 (边界框相交实际上是决定标签放置位置的一种相当糟糕的方法。为只能在 1000 个案例中的一个案例中工作的东西编写大量代码有什么意义?)
除此之外,由于 matplotlib 执行的复杂文本渲染量(例如乳胶),如果不首先完全渲染文本就不可能确定文本的范围(这相当慢)。
但是,在许多情况下,您会发现在放置有注释的标签后面使用透明框是一种合适的解决方法。
例如