Matplotlib: plt.text с определенными пользователем радиусами окружности - PullRequest
0 голосов
/ 22 февраля 2019

Уважаемые пользователи stackoverflow,

Я хочу построить несколько меток данных с их координатами в ax, 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 голосов
/ 22 февраля 2019

В принципе, вы можете использовать параметр pad для определения размера круга.Однако это тогда относительно этикетки.Т.е. маленький ярлык будет иметь меньший круг вокруг него при том же значении pad, чем больший ярлык.Также единицами pad являются размеры шрифта (т. Е. Если у вас размер шрифта 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...