matplotlib 文字遮挡问题
image
本文字数:641 字 | 阅读时长 ≈ 2 min

matplotlib 文字遮挡问题

image
本文字数:641 字 | 阅读时长 ≈ 2 min

1. 文本遮挡问题

在进行数据可视化时我们会在图片上进行一些文字标注,例如对散点图对应的每个信息标注在散点旁边,但是当点的数量较多且密集时,附近的文本会出现重叠现象,如下图

import matplotlib.pyplot as plt
import numpy as np

np.random.seed(1234)
x, y = np.random.uniform(0, 1, [2, 100])
texts = [f'text{i}' for i in range(len(x))]

fig, ax = plt.subplots(figsize=(8, 8))
for x_, y_, text in zip(x, y, texts):
    plt.plot(x_, y_, marker='*', markersize=10)
    plt.text(x_, y_, text, fontsize=10)

fig.savefig('ori_text.png', dpi=300, bbox_inches='tight', pad_inches=0) # 保存图像

2. adjust_text 解决文本遮挡

如上所示,在通常的情况下,散点聚集的区域内文字标签非常容易重叠在一起,接下来我们使用 adjustText 的基础功能来消除文字重叠现象

修改上述代码,如下图所示,可以看到使用 adjust_text 之后就不会出现遮挡问题了

import matplotlib.pyplot as plt
import numpy as np

np.random.seed(1234)
x, y = np.random.uniform(0, 1, [2, 100])
texts = [f'text{i}' for i in range(len(x))]

new_texts = []
fig, ax = plt.subplots(figsize=(8, 8))
for x_, y_, text in zip(x, y, texts):
    plt.plot(x_, y_, marker='*', markersize=10)
    new_texts.append(plt.text(x_, y_, text, fontsize=10))

# adjust_text(new_texts,  only_move={'text': 'x'}, arrowprops=dict(arrowstyle='-', color='grey'))
adjust_text(new_texts)
fig.savefig('new_text.png', dpi=300, bbox_inches='tight', pad_inches=0) # 保存图像

9月 09, 2024
9月 06, 2024