2017-12-18 2 views
2

다음 코드는 두 개의 빨간색 직사각형을 그립니다. 빨간색 직사각형은 사이에 공백없이 서로 옆에 있어야합니다. 파이썬 줄거리에서 이것은 괜찮습니다. 내 보낸 pdf에는 사각형 사이에 얇지 만 눈에 띄는 공백이 있습니다. 이 문제를 해결할 방법이 있습니까? enter image description herematplotlib의 사각형 패치 간 불필요한 공간

그러나 PDF에 공백이 :

import matplotlib.pyplot as plt 
import matplotlib 
import matplotlib.patches as patches 

fig1 = plt.figure(); 
ax = fig1.add_subplot(111, aspect='equal'); 
ax.set_xticks([]); 
ax.set_yticks([]); 

#add first patch 
dx=1.0; 
loc=(0.0,0.0); 
ax.add_patch(patches.Rectangle((loc[0]-dx/2.0,loc[1]-dx/2.0),dx,dx,facecolor='red',edgecolor='none',linewidth=0)); 

#add second patch 
dx=1.0; 
loc=(1.0,0.0); 
ax.add_patch(patches.Rectangle((loc[0]-dx/2.0,loc[1]-dx/2.0),dx,dx,facecolor='red',edgecolor='none',linewidth=0)); 

ax.set_xlim([-1,3]); 
ax.set_ylim([-1,2]); 
fig1.show(); 
plt.savefig('spaceTest.pdf'); 

모든 파이썬 플롯에서 OK입니다 enter image description here

+0

한 가지 해결 방법은 (즉, 동일한 색상으로 설정)은'edgecolor'를 사용하는 것이 될 수 있을까요? – DilithiumMatrix

답변

2

얇은 라인이 부정확 한 연산에서 온다. 정수 연산을 사용하여 사각형의 점을 계산하지만 부동 소수점 연산을 강제 실행해야합니다.

예컨대

: 2.0 대신 2의 사용 대신

ax.add_patch(patches.Rectangle((float(loc[0]-dx/2),float(loc[1]-dx/2)),float(dx),float(dx),facecolor='red',edgecolor='none',linewidth=0)); 

사용

ax.add_patch(patches.Rectangle((loc[0]-dx/2.0,loc[1]-dx/2.0),float(dx),float(dx),facecolor='red',edgecolor='none',linewidth=0)); 

0.5 대신에 분할 결과로서 0 준다. 이 방법으로 문제가 해결되지 않으면

, 당신은 또한 Antialiasing off 설정해야합니다 :

ax.add_patch(patches.Rectangle((loc[0]-dx/2.0,loc[1]-dx/2.0),float(dx),float(dx),facecolor='red',edgecolor='none',linewidth=0, antialiased = False)); 
+0

이 문제를 해결하면 여전히가는 선이 표시됩니다 (질문을 편집했습니다). 내가 원래 이것을 알아 차렸을 때, 모든 숫자는 이성적이었습니다 (분수. 분수). – Wouter

+0

또 다른 문제는 앤티 앨리어싱 일 수 있습니다. 내 게시물을 연장했습니다. – clemens

관련 문제