Ändere Matplotlib Schriftart ohne globale Auswirkungen

Ich habe eine Funktion, die eine Handlung schafft, zeigt sie an und speichert sie:

def make_a_plot(): plt.plot(x,y) plt.show() plt.safefig('./my_plot.png') 

Ich möchte, dass die Handlung von irgendwelchen Einstellungen, die derzeit vorhanden sind, nicht beeinflusst wird, ohne globale Änderungen vorzunehmen, die die Einstellungen beeinflussen, die sie verwenden:

 # User can set whatever plotting settings they want plt.style.use('ggplot') def make_a_plot(): #clear settings and modify font family rcdefaults() rcParams['font.family'] = 'sans-serif' plt.plot(x,y) plt.show() plt.safefig('./my_plot.png') # Use the function make_a_plot(x,y) # Create a second plot with their ORIGINAL settings plt.plot(x2,y2) plt.show() 

Wie kann ich sicherstellen, dass das von der Funktion erzeugte Diagramm nicht durch die Einstellungen des Benutzers beeinflusst wird und dass nach der Funktion erzeugte Plots nicht durch die Verwendung der Funktion beeinflusst werden?

One Solution collect form web for “Ändere Matplotlib Schriftart ohne globale Auswirkungen”

Ihre Frage ist etwas unklar auf dem Umfang.

Ist es die Schriftart-Eigenschaften (nur), die Sie kontrollieren / überschreiben möchten, unabhängig von den globalen Einstellungen oder möchten Sie alle vorhandenen Einstellungen ignorieren.

Wenn du Schriftart-Eigenschaften kontrollieren möchtest, fontproperties du nur den Parameter fontproperties :

 import matplotlib.pyplot as plt import matplotlib.font_manager as fm # Plt with customized font settings def make_plot(ax, x, y): # Set the font dictionaries (for plot title and axis titles) title_font = {'fontname':'Arial', 'size':'16', 'color':'blue', 'weight':'normal'} # This can be a long dictionary # Set the font properties for other places font_path = 'C:\Windows\Fonts\comic.ttf' font = fm.FontProperties(fname=font_path, size=14) axis_font = fm.FontProperties(fname=font_path, size=13) # Set the tick labels font for label in (ax.get_xticklabels() + ax.get_yticklabels()): # label.set_fontname('Arial') # label.set_fontsize(13) label.set_font_properties(font) ax.plot(x, y, 'r-', label=u'Thin Red Line') ax.set_xlabel(u"X axis", fontproperties=axis_font) ax.set_ylabel(u"Y axis", fontproperties=axis_font) ax.set_title(u"This is the Title", **title_font) ax.legend(loc='lower right', prop=font, numpoints=1) ax.text(0.1, 5, u"Some text", fontproperties=font) # A regular plot with global fong settings: def regular_plot(ax, x, y): ax.plot(x,y, 'b-', label=u'Blue Line') ax.set_xlabel(u"X axis") ax.set_ylabel(u"Y axis") ax.set_title(u"This is the Title", axes=ax1) ax.legend(loc='lower right', numpoints=1) fig, (ax1, ax2, ax3) = plt.subplots(1,3, figsize=(9,3)) x = y = range(0, 10) # Some data # 1st make a regular plot: regular_plot(ax1, x, y) # then make customized plot: make_plot(ax2, x, y) # then agains a regular plot: regular_plot(ax3, x, y) plt.show() 

Wie Sie aus dem daraus resultierenden Graphen sehen können, wurde das angepasste Diagramm nicht geändert und wurde nicht von der globalen Schriftarteinstellung beeinflusst.

Bildbeschreibung hier eingeben

Wenn Sie nach einer vollständigen Kontrolle suchen, können Sie sich anschauen, wie man Stylesheets verwendet

  • Matplotlib 3D-Flächenplots nicht zeigen
  • Wie gebe ich eine Schrittfunktion mit Matplotlib in Python?
  • Lege ein Bild zwischen benutzerdefinierten Zeilen in einer Handlung in Python
  • Wie kann ich mit Zelle Grafik aufheben?
  • Plotten der 1-dimensionalen Gaußschen Verteilungsfunktion
  • Bokeh Plotten: Aktiviere Tooltips für nur einige Glyphen
  • Interaktive (?) Plotten in Spyder mit Matplotlib
  • Effizientes Matplotlib-Nachziehen
  • Individuelle Punktgröße in Matplotlib?
  • Python Scatter Plot mit mehreren Y-Werten für jedes X
  • Gibt es so etwas wie ein Tiefenpuffer in matplotlib?
  • Python ist die beste Programmiersprache der Welt.