Matplotlib 控制两个标记之间相对于标记大小的间距

Matplotlib 控制两个标记之间相对于标记大小的间距,matplotlib,Matplotlib,我写了一个脚本,在建筑物的地面上绘制标记(X)。此外,我想添加相对于每个标记的彩色点,到目前为止效果很好(如下图所示)。我使用以下代码来绘制点,正如您所见,我使用单个标记的坐标,然后相对于X标记的位置放置点 plt.plot((((coordinates[i][1]-0.5*(j+1.8)))),(((coordinates[i][2]+0.5*(k-1)))),...) 但是,我想做的是相对于X标记放置点,不是实际坐标,而是标记大小的X倍,如下所示: plt.plot((((coordina

我写了一个脚本,在建筑物的地面上绘制标记(X)。此外,我想添加相对于每个标记的彩色点,到目前为止效果很好(如下图所示)。我使用以下代码来绘制点,正如您所见,我使用单个标记的坐标,然后相对于X标记的位置放置点

plt.plot((((coordinates[i][1]-0.5*(j+1.8)))),(((coordinates[i][2]+0.5*(k-1)))),...)
但是,我想做的是相对于X标记放置点,不是实际坐标,而是标记大小的X倍,如下所示:

plt.plot((((coordinates[i][1]-0.5*(j+markersize)))),(((coordinates[i][2]+0.5*(k-markersize)))),...)
有没有一个简单的方法可以做到这一点

非常感谢你的帮助


您可以使用缩放变换在与X标记相同的位置绘制点,但偏移量以标记大小为单位指定

import matplotlib.pyplot as plt
import matplotlib.transforms

fig, ax = plt.subplots()

def offsetpoint(x,y, px,py, msize, **kwargs):
    dx = px * msize/72.; dy = py * msize/72.
    to = matplotlib.transforms.ScaledTranslation(dx,dy,fig.dpi_scale_trans)
    trans = ax.transData + to
    ax.plot(x,y, transform=trans, marker="o", ms=msize/4.7,**kwargs)

ms = 7
ax.plot([2],[3], ms=ms, marker="x",color="crimson")
offsetpoint([2],[3], -1,-0.5, ms, color="crimson")
offsetpoint([2],[3], -1,0 ,   ms, color="limegreen")
offsetpoint([2],[3], -1,0.5,  ms, color="gold")
offsetpoint([2],[3], -1.5,-0.5, ms, color="gold")
offsetpoint([2],[3], -1.5,0,    ms, color="limegreen")
offsetpoint([2],[3], -1.5,0.5,  ms, color="crimson")

ms = 15
ax.plot([1.5],[1.5], ms=ms, marker="x",color="mediumblue")
offsetpoint([1.5],[1.5], -1,-0.5, ms, color="darkviolet")
offsetpoint([1.5],[1.5], -1,0 ,   ms, color="turquoise")
offsetpoint([1.5],[1.5], -1,0.5,  ms, color="gold")
offsetpoint([1.5],[1.5], -1.5,-0.5, ms, color="darkviolet")
offsetpoint([1.5],[1.5], -1.5,0,    ms, color="limegreen")
offsetpoint([1.5],[1.5], -1.5,0.5,  ms, color="indigo")

ax.margins(x=0.5, y=0.5)
plt.show()