918 Stimmen

Wie man die Schriftgröße auf einer Matplotlib-Plot ändern

Wie kann man die Schriftgröße für alle Elemente (Zecken, Beschriftungen, Titel) auf einem Matplotlib-Plot ändern?

Ich weiß, wie ich die Größe der Häkchen ändern kann, und zwar mit:

import matplotlib 
matplotlib.rc('xtick', labelsize=20) 
matplotlib.rc('ytick', labelsize=20) 

Aber wie kann man den Rest ändern?

1141voto

Herman Schaaf Punkte 42805

De la matplotlib-Dokumentation ,

font = {'family' : 'normal',
        'weight' : 'bold',
        'size'   : 22}

matplotlib.rc('font', **font)

Dies setzt die Schriftart aller Elemente auf die durch das kwargs-Objekt angegebene Schriftart, font .

Alternativ können Sie auch die rcParams update Methode, wie sie in diese Antwort :

matplotlib.rcParams.update({'font.size': 22})

o

import matplotlib.pyplot as plt
plt.rcParams.update({'font.size': 22})

Eine vollständige Liste der verfügbaren Immobilien finden Sie auf der Website Matplotlib-Seite anpassen .

13 Stimmen

Schön, außer es überschreibt jede Eigenschaft fontsize gefunden auf dem Weg è_é

4 Stimmen

Wo finde ich weitere Optionen für Elemente wie 'family' , 'weight' usw.?

0 Stimmen

@haccks Ich habe in der Antwort einen Link zur Matplotlib-Anpassungsseite hinzugefügt.

631voto

Pedro M Duarte Punkte 24165

Wenn Sie wie ich ein Kontrollfreak sind, sollten Sie alle Schriftgrößen explizit festlegen:

import matplotlib.pyplot as plt

SMALL_SIZE = 8
MEDIUM_SIZE = 10
BIGGER_SIZE = 12

plt.rc('font', size=SMALL_SIZE)          # controls default text sizes
plt.rc('axes', titlesize=SMALL_SIZE)     # fontsize of the axes title
plt.rc('axes', labelsize=MEDIUM_SIZE)    # fontsize of the x and y labels
plt.rc('xtick', labelsize=SMALL_SIZE)    # fontsize of the tick labels
plt.rc('ytick', labelsize=SMALL_SIZE)    # fontsize of the tick labels
plt.rc('legend', fontsize=SMALL_SIZE)    # legend fontsize
plt.rc('figure', titlesize=BIGGER_SIZE)  # fontsize of the figure title

Beachten Sie, dass Sie die Größen auch mit der Funktion rc Methode auf matplotlib :

import matplotlib

SMALL_SIZE = 8
matplotlib.rc('font', size=SMALL_SIZE)
matplotlib.rc('axes', titlesize=SMALL_SIZE)

# and so on ...

15 Stimmen

Ich habe viele der Antworten ausprobiert. Diese hier sieht am besten aus, zumindest in Jupyter-Notebooks. Kopieren Sie einfach den obigen Block an den Anfang und passen Sie die drei Schriftgrößenkonstanten an.

3 Stimmen

Ich stimme mit fvitkor überein, das ist die beste Antwort!

21 Stimmen

Bei mir hat die Titelgröße nicht funktioniert. Ich habe verwendet: plt.rc('axes', titlesize=BIGGER_SIZE)

276voto

ryggyr Punkte 3131

Wenn Sie die Schriftgröße nur für ein bestimmtes, bereits erstelltes Diagramm ändern möchten, gehen Sie folgendermaßen vor:

import matplotlib.pyplot as plt

ax = plt.subplot(111, xlabel='x', ylabel='y', title='title')
for item in ([ax.title, ax.xaxis.label, ax.yaxis.label] +
             ax.get_xticklabels() + ax.get_yticklabels()):
    item.set_fontsize(20)

2 Stimmen

Mein Ziel war es, die Schriftart der x-y-Beschriftungen, der Häkchen und der Titel in verschiedenen Größen zu haben. Eine modifizierte Version davon funktionierte für mich sehr gut.

11 Stimmen

Um auch die Legenden zu erhalten, verwenden Sie ax.legend().get_texts(). Getestet mit Matplotlib 1.4.

0 Stimmen

Das beantwortet die Frage sehr direkt. Ich danke Ihnen.

233voto

Marius Retegan Punkte 2368
matplotlib.rcParams.update({'font.size': 22})

2 Stimmen

Möglicherweise funktioniert diese Lösung nur, wenn ich eine erste Grafik erstelle und dann wie vorgeschlagen "aktualisiere", was zu einer aktualisierten Schriftgröße für neue Zahlen führt. Vielleicht ist der erste Plot notwendig, um rcParams zu initialisieren...

86voto

binaryfunt Punkte 5570

Aktualisierung: Am Ende der Antwort finden Sie eine etwas bessere Lösung.
Update #2: Ich habe auch herausgefunden, wie man die Schriftart der Legendenüberschriften ändern kann.
Update #3: Es gibt eine Fehler in Matplotlib 2.0.0 die dazu führt, dass die Beschriftungen für logarithmische Achsen auf die Standardschriftart zurückfallen. Dies sollte in Version 2.0.1 behoben sein, aber ich habe den Workaround in den 2. Teil der Antwort aufgenommen.

Diese Antwort ist für alle, die versuchen, alle Schriftarten zu ändern, einschließlich der Legende, und für alle, die versuchen, verschiedene Schriftarten und -größen für jedes Element zu verwenden. Sie verwendet nicht rc (was bei mir nicht zu funktionieren scheint). Es ist etwas umständlich, aber ich persönlich konnte mich mit keiner anderen Methode anfreunden. Es kombiniert im Grunde die Antwort von ryggyr hier mit anderen Antworten auf SO.

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as font_manager

# Set the font dictionaries (for plot title and axis titles)
title_font = {'fontname':'Arial', 'size':'16', 'color':'black', 'weight':'normal',
              'verticalalignment':'bottom'} # Bottom vertical alignment for more space
axis_font = {'fontname':'Arial', 'size':'14'}

# Set the font properties (for use in legend)   
font_path = 'C:\Windows\Fonts\Arial.ttf'
font_prop = font_manager.FontProperties(fname=font_path, size=14)

ax = plt.subplot() # Defines ax variable by creating an empty plot

# Set the tick labels font
for label in (ax.get_xticklabels() + ax.get_yticklabels()):
    label.set_fontname('Arial')
    label.set_fontsize(13)

x = np.linspace(0, 10)
y = x + np.random.normal(x) # Just simulates some data

plt.plot(x, y, 'b+', label='Data points')
plt.xlabel("x axis", **axis_font)
plt.ylabel("y axis", **axis_font)
plt.title("Misc graph", **title_font)
plt.legend(loc='lower right', prop=font_prop, numpoints=1)
plt.text(0, 0, "Misc text", **title_font)
plt.show()

Der Vorteil dieser Methode ist, dass Sie mit mehreren Schriftartenverzeichnissen verschiedene Schriftarten/Größen/Gewichte/Farben für die verschiedenen Titel, die Schriftart für die Häkchenbeschriftungen und die Schriftart für die Legende unabhängig voneinander auswählen können.


UPDATE:

Ich habe einen etwas anderen, weniger unübersichtlichen Ansatz ausgearbeitet, der ohne Schriftarten-Wörterbücher auskommt und jede Schriftart auf Ihrem System zulässt, sogar .otf-Schriftarten. Um separate Schriftarten für jede Sache zu haben, schreiben Sie einfach mehr font_path y font_prop wie Variablen.

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as font_manager
import matplotlib.ticker
# Workaround for Matplotlib 2.0.0 log axes bug https://github.com/matplotlib/matplotlib/issues/8017 :
matplotlib.ticker._mathdefault = lambda x: '\\mathdefault{%s}'%x 

# Set the font properties (can use more variables for more fonts)
font_path = 'C:\Windows\Fonts\AGaramondPro-Regular.otf'
font_prop = font_manager.FontProperties(fname=font_path, size=14)

ax = plt.subplot() # Defines ax variable by creating an empty plot

# Define the data to be plotted
x = np.linspace(0, 10)
y = x + np.random.normal(x)
plt.plot(x, y, 'b+', label='Data points')

for label in (ax.get_xticklabels() + ax.get_yticklabels()):
    label.set_fontproperties(font_prop)
    label.set_fontsize(13) # Size here overrides font_prop

plt.title("Exponentially decaying oscillations", fontproperties=font_prop,
          size=16, verticalalignment='bottom') # Size here overrides font_prop
plt.xlabel("Time", fontproperties=font_prop)
plt.ylabel("Amplitude", fontproperties=font_prop)
plt.text(0, 0, "Misc text", fontproperties=font_prop)

lgd = plt.legend(loc='lower right', prop=font_prop) # NB different 'prop' argument for legend
lgd.set_title("Legend", prop=font_prop)

plt.show()

Hoffentlich ist dies eine umfassende Antwort

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X