2015-11-01 68 views
3

繪製它,我有字典的嵌套列表,這樣創建:訪問字典中的嵌套列表只有一個鍵和matplotlib

N = 30 
grid = [] 
for row in range(N): 
    rows = [] 
    for column in range(N): 
     each_cell = {"check": 0, "type": -1} 
     rows.append(each_cell) 
    grid.append(rows) 

類型是我要繪製的一個,值-1意味着單元格中沒有任何東西,0,1,2,3是不同的類型(不是漸變),我想用不同的顏色表示。

我把一個類型的隨機數到電網這樣的:

import numpy.random as rnd 
import matplotlib.pyplot as plt 

for i in range (rnd.randint(0, N*N)): 
    x = rnd.randint(0, N) 
    y = rnd.randint(0, N) 
    grid[x][y]['check'] = 1 
    if grid[x][y]['check'] == 1: 
     grid[x][y]['type'] = rnd.randint(0,4) 

我試圖用這個來繪製它:

plt.imshow(grid['type'], interpolation = 'nearest', cmap = 'gist_ncar_r') 
plt.show() 

但顯然grid['type']沒有挑選只有像我想要的類型,任何人都知道如何解決這個問題?

+0

第二個代碼塊是否意味着在第一個代碼塊後面運行?我得到'IndexError:列表索引超出範圍'。 –

+1

爲避免出現IndexError:列表索引超出範圍,在設置x和y時應該使用rnd.randint(0,N-1)'。 –

+0

@mfcovington是的,當我將它們放在一起運行時,我不會收到錯誤 – User41880

回答

1

由於imshow需要一個「陣列狀」,你可以改變你的數據的結構,使其更易於使用。不要使用數組的字典,而要使用數組的字典。

import numpy.random as rnd 
import matplotlib.pyplot as plt 

N = 30 
grid = {'check': [], 'type': []} 

for row in range(N): 
    check_rows = [] 
    type_rows = [] 
    for column in range(N): 
     check_rows.append(0) 
     type_rows.append(1) 
    grid['check'].append(check_rows) 
    grid['type'].append(type_rows) 

for i in range (rnd.randint(0, N*N)): 
    x = rnd.randint(0, N) 
    y = rnd.randint(0, N) 
    grid['check'][x][y] = 1 
    if grid['check'][x][y] == 1: 
     grid['type'][x][y] = rnd.randint(0,4) 

plt.imshow(grid['type'], interpolation = 'nearest', cmap = 'gist_ncar_r') 
plt.show() 
+1

這似乎非常好,非常感謝你!這絕對讓它更容易訪問特定的鍵,這正是我想要的:) – User41880

+0

那麼,這正是我想在評論中提出的建議.. – Berci

+0

@Berci哈哈對不起,我沒有完全明白你的意思我很新編程,所以我很抱歉沒有理解你以前。 – User41880

0

您可以使用列表解析來得到你想要的數據到一個數組:

from numpy import * 
... 
data = array([[grid[i][j]['type'] for j in range(N)] for i in range(N)]) 

要使用array,你需要做的做numpy進口。

然後,你可以像你試圖繪製它:

matplotlib.pyplot.imshow(data, interpolation = 'nearest', cmap = 'gist_ncar_r') 
matplotlib.pyplot.show() 
+0

這個看起來像我需要的,但我越來越'NameError:名稱'數組'沒有定義' – User41880