首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在matplotlib中将像素坐标转换为数据坐标

在matplotlib中将像素坐标转换为数据坐标
EN

Stack Overflow用户
提问于 2020-01-17 19:50:57
回答 1查看 4K关注 0票数 1

我正在用matplotlib.pyplot创建一个情节。对于这个图像,我需要一个函数将像素坐标映射到数据的坐标(用于在python之外的另一个GUI-系统中与用户交互)。我尝试了ax.transData.inverted().transform(x)函数,因为它将显示坐标映射到数据坐标。但我得到的数字在x方向上的偏移量约为23像素。我读过本教程,但在这个问题上找不到任何东西。

我也尝试过来自堆栈溢出的这段代码,其中打印的x坐标偏移量为25像素。我可以看到,可能左到y轴的区域不包括在那里?我绝对需要把它包括进去。在附图中,我比较了堆栈溢出的代码与MS告诉我的红色点的x坐标。他们不一样。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-19 03:45:15

正如注释所指出的,ax.transData.inverted().transform(x)确实给出了以像素为单位定义的x的数据坐标。

所以我们跑

代码语言:javascript
复制
import matplotlib.pyplot as plt

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

在in视图中打开保存的图片,并将点标记为(0,0)。

如图像所示,它位于(126, 86)像素处。所以插入这个元组

代码语言:javascript
复制
import matplotlib.pyplot as plt

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

x = 126, 86
point = ax.transData.inverted().transform(x)
print(point)

我们会得到

代码语言:javascript
复制
[ 0.02016129 -0.01190476]

它尽可能接近于(0,0),假设像素分辨率是

代码语言:javascript
复制
x2 = 125, 85
point2 = ax.transData.inverted().transform(x2)
print(point - point2)

[0.02217742 0.0297619 ]

因此比那些得到的数字要大。

这可能不能回答这个问题,但这是我们在这里所能说的全部,因为有了这个问题的信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59794014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档