尊敬的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
变体是唯一可能的方法?
致谢
答案 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()
我不知道需要多远。
我想通常您宁愿在与文本相同的位置上创建散点图
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()