Python:散点图,每个数据点都有对齐的注释
问题描述
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()
相关文章