2017-04-08 1 views
1

Ich versuche, ein generiertes Array in Python zu plotten. Das Array wird aus maze.txt generiert, wie Sie unten sehen können. Das Ergebnis ist ein Array, das nur aus Nullen und Einsen besteht, wobei jede 0 und 1 ein Gitterquadrat auf der Karte darstellt. Die Nullen sind Grenzen, dies kann schwarz oder irgendeine Farbe sein, und die 1en sind der Weg, der navigiert wurde.Plotten eines Arrays in Python

Um mich herum zu suchen dachte ich, dass Matplotlib erreichen könnte, was ich versuche zu tun, aber ich bin nicht ganz sicher, wie man es umsetzt. Ich bin sehr unerfahren mit Python. Vielen Dank für Anregungen/Hilfe.

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) 

Im Folgenden ist ein Beispiel für 'maze.txt'

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

Welche umgewandelt wird:

[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

Haben Sie ein Beispiel 'maze.txt' haben und was die Ausgabe sein sollte? –

+0

Ich habe den Beitrag aktualisiert. –

+0

Was ist die Ausgabe genau? Ein Bild, wie eine PNG-Datei? –

Antwort

2

Sie können die pcolormesh() Befehl in matplotlib, um ein Array von Werten zu zeichnen.

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() 

Die zusätzlichen Linien helfen, das Aussehen des Labyrinths zu verbessern, indem die Achsen x und y gleich Skalen-Einstellung (es quadratisch zu machen) und durch die Strichmarkierungen x ein y entfernen.

EDIT

Added die Linie plt.axes().invert_yaxis() den Plot zu invertieren, so dass sie in der gleichen Ausrichtung wie das Array erscheinen (mit Zeile 0 an der Spitze). Gemäß der Konvention plottet matplotlib arr [0,0] in der linken unteren Ecke. Wenn Sie die Y-Achse invertieren, bewegen Sie diese zur oberen linken Ecke.

Dieser Code erzeugt folgendes Bild:

Maze generated by pcolormesh with correct orientation

+0

Vielen Dank für Ihre Antwort. Was du zeigst, sieht genau so aus, wie ich es angestrebt habe. Wenn ich es in meinem Code versuche, wird ein Fehler ausgegeben. "ValueError: benötigt mehr als 1 Wert zum Entpacken". –

+0

Ich habe auch gerade festgestellt, dass das Bild, das Sie zeigen, tatsächlich vertikal gespiegelt ist von dem, was es sein sollte. –

+0

@super_not_super_user - Einfache Lösung :) Ich habe den Code aktualisiert, um das Labyrinth richtig zu orientieren. Bitte akzeptieren Sie diese Antwort (graues Häkchen), wenn Ihr Problem dadurch gelöst wird. – Craig