Matplotlib:具有用户定义圆半径的plt.text

时间:2019-02-22 16:30:25

标签: matplotlib

尊敬的stackoverflow用户

我想在x,y-plot中绘制一些数据标签及其坐标。我想在标签周围放置一个用户定义半径的圆,因为我想用圆的半径来象征数据属性的大小。

示例数据集可能如下所示:

point1 = ["label1", 0.5, 0.25, 1e0] # equals [label, x, y, radius]
point2 = ["label2", 0.5, 0.75, 1e1] # equals [label, x, y, radius]

我想对以下代码使用silimar:

import matplotlib.pyplot as plt

plt.text(point1[1], point1[2], point1[0], bbox = dict(boxstyle="circle")) # here I want to alter the radius by passing point1[3]
plt.text(point2[1], point2[2], point2[0], bbox = dict(boxstyle="circle")) # here I want to alter the radius by passing point2[3]
plt.show()

这是某种可能吗,还是plt.add_patch变体是唯一可能的方法?

致谢

1 个答案:

答案 0 :(得分:1)

原则上,您可以使用框的pad参数定义圆的大小。但是,这是相对于标签的。即对于相同的pad值,小标签周围的圆圈较小,大标签周围的圆圈较小。另外,pad的单位是fontsize(即,如果字体大小为10pt,则1的填充将对应于10pt)。

import numpy as np
import matplotlib.pyplot as plt

points = [["A", 0.2, 0.25, 0],          # zero radius
          ["long label", 0.4, 0.25, 0],  # zero radius
          ["label1", 0.6, 0.25, 1]] # one radius


for point in points:
    plt.text(point[1], point[2], point[0], ha="center", va="center",
             bbox = dict(boxstyle=f"circle,pad={point[3]}", fc="lightgrey")) 

plt.show()

Also

我不知道需要多远。

我想通常您宁愿在与文本相同的位置上创建散点图

import numpy as np
import matplotlib.pyplot as plt

points = [["A", 0.2, 0.25, 100],          # 5 pt radius
          ["long label", 0.4, 0.25, 100], # 5 pt radius
          ["label1", 0.6, 0.25, 1600]]   # 20 pt radius

data = np.array([l[1:] for l in points])
plt.scatter(data[:,0], data[:,1], s=data[:,2], facecolor="gold")

for point in points:
    plt.text(point[1], point[2], point[0], ha="center", va="center") 

plt.show()

enter image description here