gpt4 book ai didi

python - 如何获取 Matplotlib 生成的散点图的像素坐标?

转载 作者:太空狗 更新时间:2023-10-29 21:29:34 25 4
gpt4 key购买 nike

我使用 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)

...(其中大写的变量代表可设置的参数)。

如何在生成的 PNG 中生成一个 (px, py) 对像素坐标列表,对应于 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)

生成的像素坐标(在 pcoords 中)非常接近正确值。事实上,y 坐标是完全正确的。 x 坐标偏移 1 或 2 个像素,这足以满足我的目的。

]

最佳答案

这样做相当简单,但要了解发生了什么,您需要稍微阅读一下 matplotlib 的转换。 transformations tutorial是一个很好的起点。

无论如何,这里有一个例子:

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
points, = ax.plot(range(10), 'ro')
ax.axis([-1, 10, -1, 10])

# Get the x and y data and transform it into pixel coordinates
x, y = points.get_data()
xy_pixels = ax.transData.transform(np.vstack([x,y]).T)
xpix, ypix = xy_pixels.T

# In matplotlib, 0,0 is the lower left corner, whereas it's usually the upper
# left for most image software, so we'll flip the y-coords...
width, height = fig.canvas.get_width_height()
ypix = height - ypix

print 'Coordinates of the points in pixel coordinates...'
for xp, yp in zip(xpix, ypix):
print '{x:0.2f}\t{y:0.2f}'.format(x=xp, y=yp)

# We have to be sure to save the figure with it's current DPI
# (savfig overrides the DPI of the figure, by default)
fig.savefig('test.png', dpi=fig.dpi)

这会产生:

Coordinates of the points in pixel coordinates...
125.09 397.09
170.18 362.18
215.27 327.27
260.36 292.36
305.45 257.45
350.55 222.55
395.64 187.64
440.73 152.73
485.82 117.82
530.91 82.91

enter image description here

关于python - 如何获取 Matplotlib 生成的散点图的像素坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13662525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com