2017-04-08 12 views
1

私はPythonで生成された配列をプロットしようとしています。配列はmaze.txtから生成されます。結果は0と1のみからなる配列で、0と1はマップ上の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] 

@Craig Error

+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のy目盛りを除去することにより、迷路の外観を向上させます。

EDIT

追加され、それは(上部の行0の)配列と同じ向きに表示されるようにプロットを反転するラインplt.axes().invert_yaxis()。慣例により、matplotlibは左下隅にarr [0,0]をプロットします。 y軸を反転させると、これが左上隅に移動します。

Maze generated by pcolormesh with correct orientation

+0

ありがとうございます。あなたが見せていることは、私が目指していたものと全く同じように見えます。コードで試してみるとエラーになります。 "ValueError:解凍するには1つ以上の値が必要です"。 –

+0

私は、あなたが見せてくれる画像が、実際にはそれがどんなものでなければならないのかを実際には縦に映し出していることにも気付きました。 –

+0

@super_not_super_user - 簡単な修正:)迷路の方向を正しく設定するコードを更新しました。問題を解決する場合は、必ずこの回答(灰色のチェックマーク)を受け入れてください。 – Craig

関連する問題