我有一个pyplot图,其中每个数据点都标有一个指向数据点的箭头,我将它格式化,使数据与它注解的数据点有一个恒定的偏移量。这很好,直到我用一个数据点太接近图的边缘,注解被切断。我希望有一种方法可以格式化我的注解,这样它就可以自动将自己定位在我的数据之外,但仍然留在我的图中。下面是我如何格式化我的注解的一个片段。
for label, x, y in zip(bagOlabels, time, height):
ax.annotate(
label,
xy = (x,y), xytext = (50,-20),
textcoords = 'offset points', ha = 'right', va = 'top',
arrowprops = dict(arrowstyle = '->',
connectionstyle = 'arc3,rad=0')
)
xytext = (50,-20)
是我设置标签偏移量的地方。我一直在做挖掘,但我还没有找到我要找的东西。如果你有任何关于如何实现这一点的见解,我很乐意听到它。
谢谢。
2条答案
按热度按时间sdnqo3pr1#
有一些策略你可以尝试:
1.如果该点位于图的右半部分,则使用负偏移放置注解:
1.放大图,使所有注解都适合该图。
在第一种情况下,注解可能彼此重叠。
更新:
方法
get_xlim
返回图在x轴上的极限:8fsztsew2#
我找到了一种方法,虽然很粗糙,它包括首先在正常位置绘制注解,重新绘制画布,然后如果它在轴边界之外,则删除它并绘制一个新的注解。
我不知道如何更新原始注解的位置。这需要与this question相同的答案。
需要画布重绘
fig.canvas.draw()
来强制注解更新它的bbox,因此它可以与轴边界进行比较。我还没有找到一种方法来更新bbox而不进行完整的画布重绘。(这需要在代码中进行更多的挖掘)画布重绘并在新位置重新创建注解会导致交互式图形上出现可见的 Flink ,但在保存到文件时应该可以正常工作,其中只有最终位置可见。
示例伪代码:(从工作代码复制的关键部分)