我使用 Matplotlib 生成散点图的 PNG 文件。现在,对于每个散点图,除了 PNG 文件外,我还想生成散点图中各个点的像素坐标列表。
我用来为散点图生成 PNG 文件的代码基本上是这样的:
from matplotlib.figure import Figure
from matplotlib.pyplot import setp
from matplotlib.backends.backend_agg import FigureCanvasAgg
...
fig = Figure(figsize=(3, 3), dpi=100)
ax = fig.gca()
for (x, y), m, c in zip(points, markers, colors):
ax.scatter(x, y, marker=m, c=c, s=SIZE, vmin=VMIN, vmax=VMAX)
# several assorted tweaks like ax.spines['top'].set_color('none'), etc.
setp(fig, 'facecolor', 'none')
# FigureCanvasAgg(fig).print_png(FILEPATH)
...(其中 UPPERCASE 中的变量代表可设置的参数)。
如何(px, py)
在生成的 PNG 中生成与 中的点相对应的像素坐标对列表points
?
[编辑:删除了一些关于 . 的废话imshow
。]
[编辑:
好的,这就是我根据 Joe Kington 的建议最终得出的结论。
# continued from above...
cnvs = FigureCanvasAgg(fig)
fig.set_canvas(cnvs)
_, ht = cnvs.get_width_height()
pcoords = [(int(round(t[0])), int(round(ht - t[1]))) for t in
ax.transData.transform(points)]
fig.savefig(FILEPATH, dpi=fig.dpi)
生成的像素坐标 (in pcoords
) 非常接近正确值。事实上,y 坐标是完全正确的。x 坐标相差 1 或 2 个像素,这对我的目的来说已经足够了。
]