简体   繁体   中英

scatter plot with aligned annotations at each data point

I want to produce a scatter plot with dozens of points, which could potentially be very close to each other. I've tried the method of annotation from the answer to the question:

>> matplotlib scatter plot with different text at each data point

but you can see that the labels / annotations overlap when the points are close enough to each other. Is there any library or method to generate such plots with individual annotations that don't collide with each other, nor with borders of the plot?

 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()
带有碰撞注释的散点图

I have written a library adjustText which does exactly this. 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()

在此处输入图像描述

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM