Ausrichtung von Text und Symbol in der Legende (Matplotlib)

Ich möchte die Größe des Textes in der Legende von meiner Handlung reduzieren, damit die Tikz-Zahlen relativ groß bleiben können. Das Problem ist, wenn ich die Größe der Schriftart in der Legende reduzieren, wird die Ausrichtung zwischen dem Symbol in der Legende und dem Text beeinträchtigt. Wie kann ich sie wieder paaren? Das folgende ist ein Test:

import numpy as np from matplotlib import pyplot as plt plt.rc('text', usetex = True) font = {'family' : 'normal', 'weight' : 'normal', 'size' : 25} plt.rc('font', **font) fig, ax = plt.subplots(1, 1) a = np.arange(10) b = np.random.randn(10) ax.errorbar(a, b, yerr=0.5, fmt='o', color='g', ecolor='g', capthick=1, linestyle = '-', linewidth=2, elinewidth=1, label = "Test") legend = plt.legend(bbox_to_anchor=(0., 1.02, 1., .102), loc=2, ncol=6, mode="expand", borderaxespad=0.2) plt.setp(legend.get_texts(), fontsize='15') #legend 'list' fontsize fig.set_size_inches(14.5, 10.5) plt.savefig('/Users/Cupitor/Test.png') 

Wie Sie im folgenden Bild schätzen können, ist der Text in der Legende nicht mehr zentral in Bezug auf die grüne Figur auf der linken Seite: Bildbeschreibung hier eingeben

One Solution collect form web for “Ausrichtung von Text und Symbol in der Legende (Matplotlib)”

Ich erlebe das gleiche Problem in Python 2.7 und 3.3, Ubuntu 15.04, matplotlib 1.4.2, und mit dem Agg Backend. Es scheint, dass nach dem Festlegen direkt die plt.setp der set_size der Legende entweder durch plt.setp oder mit der set_size Methode, der Text nicht richtig set_size ausgerichtet mit dem entsprechenden Handle, egal die Option für die vertikale Ausrichtung der verwendet Text ('Mitte', 'oben', 'unten', 'Grundlinie').

Der einzige Weg, den ich gefunden habe, um dieses Problem zu lösen, besteht darin, die Höhe der Begrenzungsfelder des Textes manuell auf die Höhe der Begrenzungsfelder der Griffe auszurichten. Basierend auf dem Code, den Sie in Ihrem OP, unten ist ein Beispiel, das zeigt, wie dies getan werden kann:

 import matplotlib as mpl mpl.use('TkAgg') import numpy as np from matplotlib import pyplot as plt plt.close('all') plt.rc('text', usetex = True) font = {'family' : 'normal', 'weight' : 'normal', 'size' : 25} plt.rc('font', **font) fig = plt.figure() fig.set_size_inches(14.5, 10.5) ax = fig.add_axes([0.1, 0.1, 0.85, 0.75]) #---- plot some data ---- ax.plot(np.arange(10), np.random.randn(10), 'rd', ms=15, label='The quick brown fox...') ax.errorbar(np.arange(10), np.random.randn(10), yerr=0.5, fmt='o', color='g', ecolor='g', capthick=1,ls = '-', lw=2, elinewidth=1, label = "... jumps over the lazy dog.") #---- plot legend ---- legend = plt.legend(bbox_to_anchor=(0., 1.02, 1., 0.), handletextpad=0.3, loc='lower left', ncol=6, mode="expand", borderaxespad=0, numpoints=1, handlelength=0.5) #---- adjust fontsize and va ---- plt.setp(legend.get_texts(), fontsize='15', va='bottom') #---- set legend's label vert. pos. manually ---- h = legend.legendHandles t = legend.texts renderer = fig.canvas.get_renderer() for i in range(len(h)): hbbox = h[i].get_window_extent(renderer) # bounding box of handle tbbox = t[i].get_window_extent(renderer) # bounding box of text x = tbbox.x0 # keep default horizontal position y = (hbbox.height - tbbox.height) / 2. + hbbox.y0 # vertically center the # bbox of the text to the bbox of the handle. t[i].set_position((x, y)) # set new position of the text plt.show(block=False) plt.savefig('legend_text_va.png') 

was dazu führt:

Bildbeschreibung hier eingeben

Die Einstellung von va='bottom' in plt.setp scheint bessere Ergebnisse zu erzielen. Ich glaube, dass die bbox des Textes genauer ist, wenn die vertikale Ausrichtung auf unten gesetzt ist, aber ich habe nicht weiter untersucht, um dies zu bestätigen.

  • Matplotlib-Fehlerbalken nicht auf Marker zentriert
  • Wie man Daten aus Matplotlib-Plot extrahiert
  • Mehrere Imshow-Subplots, jeweils mit Colorbar
  • Matplotlib: Erstellen von zwei (gestapelten) Subplots mit SHARED X-Achse, aber SEPARATE Y-Achsen-Werte
  • Matplotlib imshow: Daten gedreht?
  • Konvertieren Sie die negative y-Achse in positiv (matplotlib)
  • Warum zeigen matplotlib imshow () und show () Funktionen Bilder in einem anderen Farbschema, je nachdem, ob sie als uint8 oder in64 gelesen werden?
  • Offline-Wärmekarte mit Kartenhintergrund
  • Matplotlib Figur in größerer Figur einbetten
  • Matplotlib: Finde xlim und ylim nach Zoom
  • Matplotlib - Bild in Variable speichern
  • Python ist die beste Programmiersprache der Welt.