每个数据点对齐注释的散点图

7
我想制作一个散点图,上面有几十个点,这些点可能非常接近。我尝试了回答中的注释方法:

matplotlib scatter plot with different text at each data point

但是当这些点足够接近时,你会发现标签/注释会重叠。是否有任何库或方法可以生成这样的图,并且每个注释都不会相互碰撞,也不会与图的边框相撞?

import matplotlib.pyplot as plt

z = [0.15, 0.3, 0.45, 0.46, 0.6, 0.75]
y = [2.56422, 3.77284, 3.52623, 3.52623, 3.51468, 3.02199]
n = [58, 651, 393, "393(2)", 203, 123]

fig, ax = plt.subplots()
ax.scatter( z, y )

for i, txt in enumerate( n ):
    ax.annotate( txt, ( z[i] + .01, y[i] + .01 ) )

plt.show()
Scatter plot with colliding annotations


可能是Matplotlib重叠注释的重复问题。 - Ffisegydd
谢谢你指引我方向。我已经测试过了,它很好用!然而,在处理较长的文本时会出现一些问题,标签边界框参数不取决于文本长度。我将尝试使它们动态化。 - ellockie
1个回答

12

我已经编写了一个名为 adjustText 的库,它正是做这件事情的。 https://github.com/Phlya/adjustText

z = [0.15, 0.3, 0.45, 0.46, 0.6, 0.75]
y = [2.56422, 3.77284, 3.52623, 3.52623, 3.51468, 3.02199]
n = [58, 651, 393, "393(2)", 203, 123]

fig, ax = plt.subplots()
ax.scatter( z, y )
texts = []
for i, txt in enumerate( n ):
    texts.append(ax.text(z[i], y[i], txt))
adjust_text(texts)
plt.show()

在此输入图片描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接