2016-09-12 1 views
2

Ich entwickle einen einfachen Graph Visualizer mit networkX und Matplotlib in Python. Ich habe auch einige Tasten mit Text in ihnen geplottet. Insgesamt ist das Design responsiv, was bedeutet, dass der Graph und die Buttons skaliert werden, wenn ich die Größe des Fensters ändere. Die Textgröße bleibt jedoch gleich, wodurch der gesamte Visualizer bei unzureichender Größe sehr schlecht aussieht. Weißt du, wie ich den Text auch ansprechen kann?Responsive Text in Matplotlib in Python

Vielen Dank im Voraus !!!

Antwort

2

Sie aktualisieren die Schriftgröße von matplotlib.text.Text mit text.set_fontsize(). Sie können eine "resize_event" verwenden, um eine Funktion aufzurufen, die eine neue Schriftgröße festlegt. Um dies mit jedem Text in einem Plot zu tun, kann es hilfreich sein, eine Klasse zu definieren, die die anfängliche Höhe und Schriftgröße speichert und die Schriftgröße aktualisiert, sobald die Größe der Figur skaliert ist, skaliert durch die neue Höhe.

Sie können dann auch eine minimal lesbare Schriftgröße definieren, unterhalb der der Text nicht verkleinert werden soll.

Ein vollständiges Beispiel:

import matplotlib.pyplot as plt 
import numpy as np 

class TextResizer(): 
    def __init__(self, texts, fig=None, minimal=4): 
     if not fig: fig = plt.gcf() 
     self.fig=fig 
     self.texts = texts 
     self.fontsizes = [t.get_fontsize() for t in self.texts] 
     _, self.windowheight = fig.get_size_inches()*fig.dpi 
     self.minimal= minimal 

    def __call__(self, event=None): 
     scale = event.height/self.windowheight 
     for i in range(len(self.texts)): 
      newsize = np.max([int(self.fontsizes[i]*scale), self.minimal]) 
      self.texts[i].set_fontsize(newsize) 

fontsize=11 
text = plt.text(0.7, 0.6, "Some text", fontsize=fontsize, 
       bbox={'facecolor':'skyblue', 'alpha':0.5, 'pad':10}) 

cid = plt.gcf().canvas.mpl_connect("resize_event", TextResizer([text])) 

plt.show() 
+0

Dank! Das ist toll. Nur um Sie meine Motivation für das Kopfgeld in der Frage zu erfahren - ich versuchte, gute Textgrößenvorgaben herauszufinden, die mehr wie ein Prozentsatz des Diagrammbereichs sind, als hardcoded. Ich frage mich, ob so etwas als Standard existieren würde! –

+0

Standard Schriftgröße ist 10 und Standardgröße ist 4,8 Zoll. Wenn Sie die Größe der Figur verdoppeln, nehmen Sie eine Schriftgröße von 20 usw. Vielleicht möchten Sie nicht wirklich die Zahlengröße ändern, aber die dpi? – ImportanceOfBeingErnest

Verwandte Themen