2017-04-08 166 views
1

我試圖在Python中繪製一個生成的數組。該數組是從maze.txt生成的,如下所示。結果是一個僅由0和1組成的數組,其中每個0和1代表地圖上的一個網格平方。 0是邊界,對於這個問題可以是黑色或任何顏色,而1是已經被導航的路徑。在Python中繪製一個數組

四周搜索我認爲matplotlib可以完成我想要做的事情,但我不太清楚如何實現它。我對Python很不熟悉。感謝您的任何建議/幫助。

file = open("maze.txt", 'r') 
arr = [] 
for line in file.readlines(): 
    #print(); 
    arr1 = [] 
    for c in line: 
     if(c.isspace() and (c!="\n")): 
      arr1.append(1) 
      #print("1",end="") 
     elif(c!="\n"): 
      arr1.append(0) 
      #print("0",end="") 

    arr.append(arr1) 
#print() 
#print(arr) 
for row in arr: 
    print(row) 

下面是 'maze.txt'

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|        | 
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + 
| |        | 
+ + +-+-+-+-+-+-+-+-+-+-+-+-+-+ + 
| | |  | | |   | | 
+ + + +-+ +-+ + + + + +-+-+-+ + + 
| | | | |  | | | | | | | | 
+ + + + +-+-+-+ + + + +-+ + +-+ + 
| | | |   | | | |  | | 
+ + + + +-+-+-+ + + + +-+ +-+ + + 
| | | | | | | | | | | | | | 
+ + + + + + + +-+ +-+-+ +-+ + + + 
| | | | | |  |  | | | 
+ + + +-+-+ + +-+-+-+ +-+-+ + + + 
| | | |  | | |  | | | | | 
+ + + + + +-+ + + + +-+-+ + + + + 
| | | | | | |   | | | | 
+ + + + +-+ +-+-+-+-+-+ + + + + + 
| | | | |  |  | | | | | | 
+ + + + + +-+-+-+-+ + + + +-+-+ + 
| | | | | |  | | |  | | 
+ + + + + + + +-+ +-+ + +-+-+ + + 
| | | | | |  | |  | | | 
+ + + +-+-+ +-+ +-+ + +-+-+ + + + 
| | |  |  | | | | | | 
+ +-+ + +-+-+ +-+ +-+ + + + + + + 
| | |    | | | | | 
+ + + +-+-+-+-+-+-+-+-+-+-+-+ + + 
| | |       | | 
+ + +-+-+-+-+-+-+-+-+-+-+-+-+-+ + 
| |        | 
.-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 

的一個例子將其轉化爲:

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0] 
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0] 
[0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0] 
[0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0] 
[0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0] 
[0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0] 
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0] 
[0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0] 
[0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0] 
[0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0] 
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0] 
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0] 
[0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0] 
[0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0] 
[0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0] 
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0] 
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0] 
[0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0] 
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0] 
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0] 
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0] 
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0] 
[0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0] 
[0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0] 
[0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0] 
[0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0] 
[0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0] 
[0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0] 
[0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0] 
[0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0] 
[0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0] 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 

Error @Craig

+0

你有maze.txt'的'一個例子,輸出應該是什麼? –

+0

我更新了帖子。 –

+0

準確的輸出是什麼?一個圖像,就像一個.PNG文件? –

回答

2

可以在使用pcolormesh()命令matplotlib繪製一組數值。

import matplotlib.pyplot as plt 

plt.pcolormesh(arr) 
plt.axes().set_aspect('equal') #set the x and y axes to the same scale 
plt.xticks([]) # remove the tick marks by setting to an empty list 
plt.yticks([]) # remove the tick marks by setting to an empty list 
plt.axes().invert_yaxis() #invert the y-axis so the first row of data is at the top 
plt.show() 

附加線幫助通過設置軸x和y等於秤提高迷宮的外觀(使它方形)以及通過去除x上的ý刻度線。

EDIT

增加了行plt.axes().invert_yaxis()反轉的情節,使得其出現在相同的取向的陣列(行0中在頂部)。按照慣例,matplotlib在左下角繪製了arr [0,0]。反轉Y軸將其移動到左上角。

此代碼將產生如下圖:

Maze generated by pcolormesh with correct orientation

+0

感謝您的回覆。你展示的東西看起來完全像我的目標。當我在我的代碼中嘗試它時會引發錯誤。 「ValueError:需要多個值才能解包」。 –

+0

我也剛剛意識到你展示的圖像實際上是從它應該是垂直鏡像的。 –

+0

@super_not_super_user - 簡單修復:)我更新了代碼以正確定位迷宮。如果它解決了您的問題,請務必接受此答案(灰色複選標記)。 – Craig