adjustText实践——调整matplotlib散点图标签,避免重复

简介

博主需要在全球地图上标注出化石点数据,由于化石产出点一样或很近,导致呈现的效果不理想,如果自动添加标签,又会重叠。近期看到adjustText库可以自动调整标签,避免重复。本文记录学习过程,并将在最后展示博主的图示,期待一下效果。

原始效果

不加标签

加上标签

手动调整注释位置也不可能

adjustText认识

1. 简介

学习资料来自adjustText官网——https://adjusttext.readthedocs.io/en/latest/

adjustText帮助用于调整matplotlib绘图中的注释文本布局,尽可能避免或减少注释文件间的重叠。

通过检测文本的边界重叠,尝试移动它们以减少重叠来实现功能。本库受到用于R/gglot2的ggrepel启发。

2. 函数

该库仅有1个函数:

adjustText.adjust_text(texts, x=None, y=None, objects=None, avoid_self=True, force_text: tuple[float, float] = (0.1, 0.2), force_static: tuple[float, float] = (0.1, 0.2), force_pull: tuple[float, float] = (0.01, 0.01), force_explode: tuple[float, float] = (0.01, 0.02), expand: tuple[float, float] = (1.05, 1.1), explode_radius='auto', ensure_inside_axes=True, expand_axes=False, only_move={'explode': 'xy', 'pull': 'xy', 'static': 'xy', 'text': 'xy'}, ax=None, min_arrow_len=5, time_lim=0.5, *args, **kwargs)

反复地、迭代地调整文本的位置
在绘图完成后再调用adjust_text()函数。

3. 参数解读

参数 传参类型 含义
text 列表 matplotlib.text.Text对象组成的列表
x 类似数组 文本注释的坐标x值;如若没有即用文本坐标
y 同上 同上
objects 列表或PathCollection 需要避开的matplotlib对象;这些对象必须有get_window_extent()方法;或是一个PathCollection或一组Bbox对象
avoid_self 布尔值,默认True 是否让文本避开原始位置
force_text 元组,默认(0.1, 0.2) 文本的调整空间就是两值乘积的面积
force_static 元组,默认(0.05, 0.1) 散点和其他对象之间的调整空间
force_pull 浮点数,default (0.001, 0.0001) 也是调整空间,将文本拉向原始位置
force_explode 浮点数,default (0.001, 0.0001) 也是调整空间,文本间保持的距离
expand 类似数组,default (1.05, 1.2) 有两个值的列表或元组(x, y),将文本拉开的距离控制
explode_radius 浮点数或"auto",默认"auto" 在一开始的显示单位中,检查离文本最近的对象移动多远,那么在100的数量级上“auto”使用的是最大文本的大小
ensure_inside_axes 布尔值,默认True 是否强制文本停留在坐标轴内
expand_axes 布尔值,默认Default 在调整位置之前,是否扩展坐标轴以适应所有文本
only_move 字典,默认{‘points’:‘xy’, ‘text’:‘xy’, ‘objects’:‘xy’} 对于某些类型的重叠,将文本移动限制在某些轴上的字典。有效的键是pointstextobjects。有效值有’ ‘、’ x ‘、’ y ‘和’ xy ‘。例如,only_move={’ points ': ’ y ', ’ text ': ’ xy ', ’ objects ': ’ xy '}禁止文本沿x轴移动,因为它们与点重叠。
ax matplotlib axe,默认当前axe (plt.gca()) ax object with the plot
min_arrow_len 浮点数,默认5 如果文本比这个距离目标点更近,则不要添加箭头(以显示单位为单位)。
time_lim 浮点数,默认0.1 调整需要多少时间,以秒为单位
kwargs 在所有优化完成后,任何参数都将被输入obj:FancyArrowPatch,以便在需要时绘制连接的箭头。

尝试解决

后记

没有很好地解决。而且该库作者早已停更。官方文档和脚本有出入,应该是后续有人优化过。有时间仔细研究研究。

你可能感兴趣的:(matplotlib,python,开发语言)