如何注释两个值,一个在气泡内,一个在气泡外,用于 matplotlib 散点图

How to annotate two values, one inside and one outside the bubble for matplotlib scatterplot

我遵循示例示例,散点图水果计数作为气泡图的排名。我可以让它在气泡内外进行注释。
示例代码:

import matplotlib.pyplot as plt
import numpy as np

fruit_name = ["Apple", "Pear", "Orange", "Banana", "Strawberry"]
fruit_count = [10000, 8000, 5000, 2000, 1000 ]
fruit_rank = [1, 2, 3, 4, 5]

#create scatter plot
fig, ax = plt.subplots()
ax.scatter(fruit_rank,fruit_count,s=fruit_count,marker='o', c=fruit_rank)

#label each bubble
for i in range(len(fruit_rank)):
    plt.annotate("({}) {}".format(i+1,fruit_name[i]),xy=(fruit_rank[i], fruit_count[i]))

#Label axis
plt.xlabel('fruit Count')
plt.ylabel(' fruit Rank')
plt.show()

如下图

问题是否可以给每个气泡注解两个值?
理想情况下,我想做以下事情。

1) 在各自的气泡内标注等级 (1..5)。
2) 水果名称出现在每个气泡的顶部。

如果不是至少,我如何在气泡内部进行注释,使值(例如等级编号或名称)落在每个气泡的中心?

非常感谢。

您肯定会创建两个注释。一个在气泡的中心有等级,一个在它上面有名字。对于排名,你可以简单地将水平和垂直对齐设置为"center"。对于名称,您可以使用偏移量,它是垂直方向气泡大小平方根的一半。

import matplotlib.pyplot as plt
import numpy as np

fruit_name = ["Apple", "Pear", "Orange", "Banana", "Strawberry"]
fruit_count = [10000, 8000, 5000, 2000, 1000 ]
fruit_rank = [1, 2, 3, 4, 5]

#create scatter plot
fig, ax = plt.subplots()
ax.axis([0,6,0,14000])
ax.scatter(fruit_rank,fruit_count,s=fruit_count,marker='o', c=fruit_rank)

#label each bubble
for n,c,r in zip(fruit_name,fruit_count,fruit_rank):
    plt.annotate("({})".format(r),xy=(r, c), ha="center", va="center")
    plt.annotate(n ,xy=(r, c), xytext=(0,np.sqrt(c)/2.+5), 
                 textcoords="offset points", ha="center", va="bottom")

#Label axis
plt.xlabel('fruit Rank')
plt.ylabel(' fruit Count')
plt.show()