2012-11-18 5 views
13

Ich versuche Power Flow-Ergebnisse in ein Netzwerkdiagramm einzufügen, das mit Matplotlib erstellt wurde. Einige Busse sind so nahe beieinander, dass die Beschriftung der Namen zusammen mit den Ergebnissen des Leistungsflusses große Kopfschmerzen bereitet, da Textüberlappungen einige Teile unlesbar machen.Wie man nicht überlappenden Text in Matplotlib einfügen?

Gibt es eine Möglichkeit, die Begrenzungsbox des Texts zu verwenden, um zu bestimmen, ob der Text die Zeichnungslinien und/oder einen anderen Text überlappt?

+0

Es gab einige Diskussionen über ein ähnliches Problem in der Mailplotlib-Benutzer-Mailing-Liste. Siehe [hier] (http://matplotlib.1069221.n5.nabble.com/Optimal-positioning-of-text-td10090.html). – tiago

+0

Haben Sie versucht plt.tight_layout()? – Yugi

+0

Wir haben etwas ähnliches hier in der Funktion get_clear() getan: https://sourceforge.net/p/spacepy/code/ci/master/tree/spacepy/plot/utils.py#l954 –

Antwort

3

Dies ist keine einfache Antwort auf dieses Problem, da es ein Beispiel für die automatic label placement problem ist, die NP-schwer ist (d. H. Es gibt keine schnellen algorithmischen Ansätze, die garantiert dies lösen). Nicht einmal Google und OpenStreetMaps haben dafür Lösungen perfektioniert!

Mögliche Lösungen können die Verbindungen oder Etiketten für weniger wichtige Elemente sind versteckt, wodurch eine Reihe von Bildern, von denen jeder eine Teilmenge der Etiketten/Verbindungen enthält, und Bilder mit verschiedenen Zoomstufen. Das Sklearn-Tutorial auf hat ein gutes Beispiel für einige einfache heuristische Ansätze für die Etikettenplatzierung.

Sie können auch den GIS-Stack austauschen, as similar questions have been asked there.