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