2016-03-23 27 views
2

蟒蛇matplotlib重疊的矩形我想在下面的例子中繪製與matplotlib不同的矩形,其應該在它們之間的差距不大,如:在一定規模

import matplotlib.pyplot as plt 
from matplotlib.patches import Rectangle 
import numpy as np 

Nmax = 200 

xvalues = np.arange(Nmax) 

fig = plt.figure() 
ax = plt.subplot(111) 

for xvalue in xvalues: 
    rect = Rectangle(
     xy=(xvalue - 0.25, xvalue), 
     width = 0.5, 
     height = 1.5, 
     facecolor = 'r', 
     edgecolor = 'r', 
     ) 
    ax.add_patch(rect) 

ax.autoscale_view() 
plt.show() 

它的工作,因爲我想爲工作Nmax = 20個矩形。 Nmax時的積= 20以下:

enter image description here

作爲矩形的位置總是1「單元」開與0.5的寬度總是有0.5兩者之間的相鄰矩形的間距。

但是,當我用200個矩形嘗試它時,矩形變得更粗,並開始重疊。放大圖形後,矩形再次分開。但將原始圖形保存爲pdf仍然會產生重疊的矩形。與Nmax個= 200以下PDF的放大:

enter image description here

我不知道爲什麼發生這種情況,因爲我仍然指定它們的寬度爲0.5。如果有人能給我一個提示,我會很高興。 我不確定,但矢量格式應該可以確切地確定矩形的位置,所以也許將其保存爲SVG並將其轉換爲PDF會做伎倆?

最終溶液: 好的,由於和風的解決方案是關閉矩形邊緣:

edgecolor = 'none', 

在matplotlib.finance改變edgecolor爲「無」也將解決重疊燭臺杆,其似乎是同樣的問題here

+1

只是一個猜測,但可能的寬度是指只有面部的寬度,而不是面對正邊緣。如果是這種情況,邊緣將始終是相同的大小,併爲您的寬度提供「填充」,這隻會在小尺度上顯着。嘗試關閉邊緣,看看是否有幫助。 – zephyr

回答

0

假設你想要使用edgecolor(即設置edgecolor='none'是不是一個選項),您可以生成一個PDF顯示框之間的空間通過增加figsizedpi創建人物時:

fig = plt.figure(figsize=(12,4), dpi=600) 

如果figsizedpi足夠大,則PDF產生後端將顯示矩形之間的空白:

import matplotlib.pyplot as plt 
from matplotlib.patches import Rectangle 
import numpy as np 

Nmax = 200 
xvalues = np.arange(Nmax) 

fig = plt.figure(figsize=(12,4), dpi=600) 
ax = plt.subplot(111) 

for xvalue in xvalues: 
    rect = Rectangle(
     xy=(xvalue - 0.25, xvalue), 
     width = 0.5, 
     height = 1.5, 
     facecolor = 'r', 
     edgecolor = 'r', 
     ) 
    ax.add_patch(rect) 

ax.autoscale_view() 
# plt.show() 
plt.savefig('/tmp/test.pdf') 

詳情:

enter image description here


另一種選擇是減少線寬創建矩形時:

Rectangle(..., edgecolor='b', linewidth=0.01) 
+0

謝謝,但我認爲這只是一個臨時的解決方法。增加分辨率會導致邊緣變薄,因此它們不會重疊。但隨着Nmax的進一步增加,它們將再次重疊。所以你當然可以再次增加figsize,但是在某些時候你會遇到內存問題。 – tribol