Matplotlib:极坐标投影transData.transform给出错误的值

时间:2018-06-22 15:37:36

标签: python matplotlib

我想在极坐标图中的特定点插入一个小图标。

据我了解,setOnFinished()收到fig.figimage(image, x, y)作为显示坐标。我使用x,y,但这无法正常工作。

我的代码如下:

ax.transData.transform_point((theta, radius))

Here's the result,而from numpy import * from matplotlib.pyplot import * t = arange(0, 2*pi, 0.01) r = ones(t.size) fig = gcf() ax = fig.add_subplot(111, projection='polar') ax.plot(t, r) x, y = ax.transData.transform((pi/4, 1.0)) img = imread('die.png') fig.figimage(img, x, y) show() 的左下角应以45度和半径1接触蓝线。

1 个答案:

答案 0 :(得分:0)

在变换为您提供正确的坐标之前,您需要先绘制图形。

fig.canvas.draw()
x, y = ax.transData.transform((pi/4, 1.0))

这是因为极坐标图的轴位置仅在实际绘制图形时才确定。事先尝试变形会导致错误的坐标。

通常,在这种情况下,我建议使用AnnotationBbox而不是figimage

import numpy as np
import matplotlib.pyplot  as plt
from matplotlib.offsetbox import OffsetImage, AnnotationBbox

t = np.arange(0, 2*np.pi, 0.01)
r = np.ones(t.size)

fig = plt.gcf()
ax = fig.add_subplot(111, projection='polar')
ax.plot(t, r)

img = plt.imread('https://i.stack.imgur.com/9qe6z.png')

imagebox = OffsetImage(img, zoom=0.2)
imagebox.image.axes = ax

ab = AnnotationBbox(imagebox, (np.pi/4, 1.0),
                    box_alignment=(0., 0),
                    xycoords='data', pad=0)

ax.add_artist(ab)

plt.show()

enter image description here