2017-12-21 4 views
1

Figure.transFigure.transform() 기능을 사용하여 그림 좌표에 선을 그려야하지만 완전히 이해하지 못했거나 다른 점이 잘못되었습니다. Matplotlib Documentation에 따르면, transFigureFigure.transFigure.transform() : 그림 좌표의 선들이 그림과 함께 축척되지 않습니다

이어야합니다. (0,0)은 그림의 왼쪽 하단이고 (1,1)은 그림의 오른쪽 상단입니다. 나는 바닥이 Figure (안 Axes)의 오른쪽 상단 왼쪽에서 대각선을 그릴해야 작은 테스트 프로그램을 작성하는 경우

그러나, 이것은 단지 원래의 그림과 정확하게 선을 그립니다. 그림의 크기를 조정하면 선이 더 이상 오른쪽 상단에서 끝나지 않습니다. 임의의 크기 조정 후

from matplotlib import pyplot as plt 
from matplotlib import lines 
import numpy as np 

x = np.linspace(0,1,100) 

X = np.array([0.0,1.0]) 
Y = np.array([0.0,1.0]) 

fig, ax = plt.subplots() 

ax.plot(x, np.cos(x)) 
X0, Y0 = fig.transFigure.transform([X,Y]) 

line1 = lines.Line2D(X0, Y0, color='r', lw = 5) 
fig.lines.append(line1) 

plt.show() 

... 그 결과 그림 : 작은 테스트 프로그램 아래의이 동작을 설명하기 위해 당신은 픽셀의 정적 라인을 만들

figure that results from the above code after resizing

답변

1

참고 여기 조정합니다. 항상 (0,0)에서 (x1, y1) 픽셀 범위이며, 여기서 (x1, y1)은 원래 그림의 오른쪽 위 모서리입니다.

일반적으로 원하는 것은 그림 좌표에서 (0,0)에서 (1,1)로가는 선을 만드는 것입니다. 그래서 하나가

line1 = lines.Line2D([0,1], [0,1], transform=fig.transFigure) 

전체 예제로, 수동으로 포인트를 변환하지만, fig.transFigure가 변환하자 않을 것이다 :

from matplotlib import pyplot as plt 
from matplotlib import lines 
import numpy as np 

x = np.linspace(0,1,100) 

X = np.array([0.0,1.0]) 
Y = np.array([0.0,1.0]) 

fig, ax = plt.subplots(figsize = (5,5), dpi = 100) 

ax.plot(x, np.cos(x)) 

line1 = lines.Line2D(X, Y, color='r', lw = 5, transform=fig.transFigure) 
fig.lines.append(line1) 

plt.show() 

enter image description here

이 질문에서와 동일한 플롯을 생산, 그러나 당신은 자신을 변환 할 필요가 없으며 쉽게 확장하거나 크기를 조정할 수 있다는 장점이 있습니다.

관련 문제