2017-11-02 1 views
1

(towns_n und Gemeinden sind zwei Reihen mit jeweils 50 Nummern und Namen jeweils)Ausrichten von Spalten in matplotlib.pyplot.figtext

count = 0 
for number,town in zip(towns_n,Towns): 
    textString += (number +'.'+ town).ljust(35) 
    count += 1 
    if count == 6: 
     count = 0 
     textString += '\n' 
plt.figtext(0.13,0.078,textString) 

Mein Problem ist, dass ich 6 Spalten dargestellt werden soll.

Und wenn ich Drucken meine Zeichenfolge sieht es genau wie erwartet aus, es sieht aus wie 6 ausgerichtete Spalten. Aber wenn ich es auf meinem anderen Bild plane, sieht es überhaupt nicht ausgerichtet aus.
Ich glaube nicht, dass es wichtig ist, aber mein anderes Bild ist eine map usign Grundkarte. Ich zeichne diese Zeichenfolge direkt unter meiner Karte.

What I am getting

Edit: Sie können versuchen, diese 50 zufällige Zeichenfolge und Zahlen zu erzeugen, so dass Sie nicht über die aktuelle Liste der Städte benötigen.

def id_generator(size=6, chars=string.ascii_uppercase + string.digits): 
    return ''.join(random.choice(chars) for _ in range(size)) 

Towns=[] 
towns_n=[] 

for i in range(50): 
    string = id_generator() 
    Towns.append(string); 
    towns_n.append(str(i)) 
+0

Können Sie p bitte rüber ein Bild von dem, worüber du hier sprichst? Stellen Sie auch ein [mcve] des Problems bereit. – ImportanceOfBeingErnest

+0

Ich vermute, was Sie versuchen, erfordert eine [monospaced Schriftart] (https://en.wikipedia.org/wiki/Monospaced_font). Hast du in Betracht gezogen, eins zu benutzen? Andernfalls müssten Sie 6 einzelne Textelemente erstellen (eines für jede "Spalte"). Stellen Sie wieder eine [mcve] bereit, um eine Antwort zu erhalten (oder erwarten Sie, dass jemand alle Städte in Großbritannien eintippt). – ImportanceOfBeingErnest

+0

Danke, ich denke, ich werde aufgeben und tun, was Sie über die 6 Saiten vorschlagen. Ich habe etwas in der letzten Bearbeitung hinzugefügt, so dass Sie 50 zufällige Wörter und Zahlen erhalten können. –

Antwort

1

Wie gesagt in den Kommentaren, würde eine Lösung ein monospaced font zu bedienen.

plt.figtext(..., fontname="DejaVu Sans Mono") 

Beispiel:

import random 
import string 
import matplotlib.pyplot as plt 

def id_generator(size=6, chars=string.ascii_uppercase + string.digits): 
    return ''.join(random.choice(chars) for _ in range(size)) 

Towns=[] 
towns_n=[] 

for i in range(50): 
    string = id_generator() 
    Towns.append(string); 
    towns_n.append(str(i)) 


count = 0 
textString ="" 
for number,town in zip(towns_n,Towns): 
    textString += (number +'.'+ town).ljust(12) 
    count += 1 
    if count == 6: 
     count = 0 
     textString += '\n' 

fig = plt.figure() 
fig.add_subplot(111) 
fig.subplots_adjust(bottom=0.5) 
plt.figtext(0.05,0.078,textString, fontname="DejaVu Sans Mono") 

plt.show() 

enter image description here

Die andere Option ist es, jede Spalte separat zu erstellen:

import random 
import string 
import matplotlib.pyplot as plt 

def id_generator(size=6, chars=string.ascii_uppercase + string.digits): 
    return ''.join(random.choice(chars) for _ in range(size)) 

Towns=[] 
towns_n=[] 

for i in range(50): 
    string = id_generator() 
    Towns.append(string); 
    towns_n.append(str(i)) 


fig = plt.figure() 
fig.add_subplot(111) 
fig.subplots_adjust(bottom=0.5) 

space = 0.05 
left = 0.05 
width= 0.15 
for i in range(6): 
    t = [towns_n[i::6][j] + ". " + Towns[i::6][j] for j in range(len(towns_n[i::6]))] 
    t = "\n".join(t) 
    plt.figtext(left+i*width,0.35,t, va="top", ha="left") 

plt.show() 

enter image description here

Verwandte Themen