matplotlib 경로의 선폭을 그림 줌/스케일 수준에 연결할 수 있습니까?matplotlib 경로 선폭을 그림 확대/축소에 연결
matplotlib 경로 (베 지어 곡선 포함)가지도에 도로를 그려주는지도를 그립니다. 확대시 경로의 너비가 확대되고 싶습니다.
첨부 된 스크립트에서 다각형 근사는 올바르게 확대 할 수 있지만 경로 (빨간색 선)는 확대/축소 할 수 없습니다 (폭).
선폭을 일부 축척 변환에 연결하고 콜백을 통해 다시 그리기 할 수 있습니까? 행의 획 너비가 직접 데이터 좌표에 연결 할 수 없으므로 본인이 아는
import matplotlib.pyplot as plt
from matplotlib.path import Path
import matplotlib.patches as patches
import numpy as np
def main():
ax = plt.subplot(111)
verts = np.array([ (0., 0.), (0.5, .5), (1., 0.8), (0.8, 0.)])
codes = np.array([Path.MOVETO, Path.CURVE4, Path.CURVE4, Path.LINETO ])
# Can this curve have zoomable width
path = Path(verts, codes)
patch = patches.PathPatch(path, fc='none', color='r', lw=4, zorder=3)
ax.add_patch(patch)
ax.plot(verts[:,0], verts[:,1], 'o--', lw=2, color='k', zorder=2)
# these will be polygonal approx that will have proper zoom
v=np.array([]).reshape((-1,2))
c=[]
for i in range(len(verts)-1):
vtmp, ctmp = line2poly(verts[[i,i+1],:],0.03)
v = np.vstack((v,vtmp))
c = np.concatenate((c,ctmp))
path_zoom = Path(v,c)
patch_zoom = patches.PathPatch(path_zoom, fc='r', ec='k', zorder=1, alpha=0.4)
ax.add_patch(patch_zoom)
ax.set_xlim(-0.1, 1.1)
ax.set_ylim(-0.1, 1.1)
plt.show()
def line2poly(line, width):
dx,dy = np.hstack(np.diff(line,axis=0)).tolist()
theta = np.arctan2(dy,dx)
print(np.hstack(np.diff(line,axis=0)).tolist())
print(np.degrees(theta))
s = width/2 * np.sin(theta)
c = width/2 * np.cos(theta)
trans = np.array([(-s,c),(s,-c),(s,-c),(-s,c)])
verts = line[[0,0,1,1],:]+trans
verts = np.vstack((verts, verts[0,:]))
codes = np.array([Path.MOVETO, Path.LINETO, Path.LINETO, Path.LINETO, Path.CLOSEPOLY])
return verts,codes
if __name__=='__main__':
main()
'빠른 예를 들어
plt.quiver'는 어떻게 든이 일을하지만, 그 정보를 활용하는 방법을 모르겠습니다 : P – askewchan
hmmm .... plt.quiver가 나를 위해이 일을하지 않습니다. – waqy
@askewchan -'quiver'는 경로 대신에 폴리곤을 사용하기 때문에 (즉, 화살표 대신에 획이없고 대신 다각형입니다). –