Поскольку размер пузырьков s
равен s=z*4000
, радиус пузырька равен np.sqrt(z*4000)/2
.(Объяснение см. размер маркера точечной диаграммы ).
Следовательно, вы должны создать аннотацию, которая будет располагаться в центре пузырьков в координатах данных и смещать ее на np.sqrt(z*4000)/2
в единицах.очков (или, возможно, на 2 или 3 балла больше, чтобы он выглядел красиво).
Это можно сделать, используя
annotate("text", xy=(x[i],y[i]),
xytext=(np.sqrt(z[i]*4000)/2+2, 0), textcoords="offset points")
Полный пример:
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots(figsize = (5,10))
# create data
x = [1,1,1,1,1,1,1,1,1,1]
y = ['A','B','C','D',
'E','F','G','H','I','']
z = [10,20,80,210,390,1050,2180,4690,13040,0]
labels = [1,2,8,21,39,105,218,469,1304]
plt.xlim(0.9,1.1)
sc = plt.scatter(x, y, s=z*4000, c="#8C4799", alpha=0.3)
for txt, size, xi, yi in zip(labels, sc.get_sizes(), x,y):
ax.annotate(txt, xy=(xi,yi), xytext=(np.sqrt(size)/2+2, 0),
textcoords="offset points",
ha='left', va='center', )
plt.show()
