2016-02-05 90 views
3

我想用matplotlib繪製一個隨機佔用的網格。網格看起來與塊由一個隨機偏移量:爲什麼我的網格在這個例子中偏移?

The grid

下面是代碼:

import matplotlib.pyplot as plt 
import numpy as np 

# Make a 10x10 grid... 
nrows, ncols = 10,10 
# Fill the cells randomly with 0s and 1s 
image = np.random.randint(2, size = (nrows, ncols)) 

# Make grid 
vgrid = [] 
for i in range(nrows + 1): 
    vgrid.append((i - 0.5, i - 0.5)) 
    vgrid.append((- 0.5, 9.5)) 

hgrid = [] 
for i in range(ncols + 1): 
    hgrid.append((- 0.5, 9.5)) 
    hgrid.append((i - 0.5, i - 0.5)) 

row_labels = range(nrows) 
col_labels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'j'] 

plt.matshow(image, cmap='Greys') 
for i in range(11): 
    plt.plot(hgrid[2 * i], hgrid[2 * i + 1], 'k-') 
    plt.plot(vgrid[2 * i], vgrid[2 * i + 1], 'k-') 

plt.axis([-0.5, 9.5, -0.5, 9.5]) 
plt.xticks(range(ncols), col_labels) 
plt.yticks(range(nrows), row_labels) 

plt.show() 

這個問題似乎是,當我執行一個積區發生;此行:

plt.axis([-0.5, 9.5, -0.5, 9.5]) 

此外,請隨時提出一個更好的方法。我對pyplot很陌生。

+0

這應該https://github.com/matplotlib/matplotlib/pull/5718應合併爲mpl2.0 – tacaswell

回答

3

您可以使用plt.grid()繪製座標軸網格。不幸的是,它不會解決問題。對於imshow(由matshow調用的函數),網格的未對齊爲known issue

我建議玩數字大小和網格線寬,直到你得到可以接受的東西。

plt.figure(figsize=(5,5)); 

nrows, ncols = 10,10 
image = np.random.randint(2, size = (nrows, ncols)) 
row_labels = range(nrows) 
col_labels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'j'] 
plt.matshow(image, cmap='Greys',fignum=1,interpolation="nearest") 

#set x and y ticks and labels 
plt.xticks(range(ncols), col_labels) 
plt.yticks(range(nrows), row_labels); 

#set minor axes in between the labels 
ax=plt.gca() 
ax.set_xticks([x-0.5 for x in range(1,ncols)],minor=True) 
ax.set_yticks([y-0.5 for y in range(1,nrows)],minor=True) 
#plot grid on minor axes 
plt.grid(which="minor",ls="-",lw=2) 

enter image description here

+0

由於是固定的,改變網格線的線條寬度似乎是一個快速和髒的修復,但如果它是唯一的選擇,那麼我會嘗試與它一起生活。希望這個問題很快就會解決。 – cvb0rg

1

這是known behavior因爲,在默認情況下,matshow()電話imshow()的說法interpolation="nearest"。你應該通過手動覆蓋的說法得到更好的結果:

plt.matshow(image, cmap='Greys', interpolation="none") 
+0

我實際上用「最接近」比「無」得到了更好的結果,IPython筆記本上有內聯圖,我認爲這取決於圖的大小以及你如何顯示/保存它 – Mel

+0

是的,如果它是屏幕別名,那麼更大圖像通常更好,但不知道IPython是否可以很好地運行。 – Deditos

相關問題