Хотя ответ @ ralf-htp приятный и чистый и использует scatter
, насколько я знаю, шкала маркеров выражена в points
(см., Например, здесь ). Более того, при увеличении пользовательские маркеры не изменят размер.
Может быть, это именно то, что вы ищете. Если нет, то использование отдельных Rectangle
объектов также отлично работает. Это позволяет вам указывать ширину и высоту в единицах данных, а не в точках, и вы можете увеличивать масштаб. При необходимости также легко применить вращение, установив атрибут angle
:
from matplotlib import pyplot as plt
from matplotlib.patches import Rectangle
# Your data
a = ([126, 237, 116, 15, 136, 348, 227, 247, 106, 5, -96, 25, 146],
[117, 127, 228, 107, 6, 137, 238, 16, 339, 218, 97, -4, -105])
# Your scatter plot
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(a[0], a[1], color = 'red', s=10)
# Add rectangles
width = 30
height = 20
a_zipped = zip(*a)
for a_x, a_y in a_zipped:
ax.add_patch(Rectangle(xy=(a_x-width/2, a_y-height/2) ,width=width, height=height, linewidth=1, color='blue', fill=False))
ax.axis('equal')
plt.show()
Результат:
Примечание. При необходимости вы можете получить экземпляры Rectangle
через ax.get_children()
.