2017-12-18 25 views
2

以下代碼繪製兩個紅色矩形。 紅色長方形應該彼此相鄰,兩者之間沒有空格。在python情節中,這是可以的。在導出的pdf中,矩形之間有一個薄而明顯的空白區域。有沒有解決這個問題的方法?matplotlib中的矩形修補程序之間不需要的空間

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'); 

全部是在Python情節OK: enter image description here

但有PDF中的空白:enter image description here

+0

一個解決辦法可能是使用了'edgecolor'(即其設置爲相同的顏色)? – DilithiumMatrix

回答

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)); 

使用的2.0代替2給人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

如果我解決這個問題,它仍然顯示細線(我編輯了問題)。當我最初注意到這一點時,所有這些數字都是有理數的(fractions.Fraction)。 – Wouter

+0

另一個問題可能是抗鋸齒。我已經延長了我的帖子。 – clemens