Text-Eigenschaften und Layout#

Steuerung von Eigenschaften von Text und dessen Layout mit Matplotlib.

matplotlib.text.Text-Instanzen haben eine Vielzahl von Eigenschaften, die über Schlüsselwortargumente für set_title, set_xlabel, text usw. konfiguriert werden können.

Eigenschaft

Wert Typ

alpha

float

backgroundcolor

beliebige Matplotlib Farbe

bbox

Rectangle-Eigenschaftswörterbuch plus Schlüssel 'pad', was ein Abstand in Punkten ist

clip_box

eine matplotlib.transform.Bbox-Instanz

clip_on

bool

clip_path

eine Path-Instanz und eine Transform-Instanz, eine Patch

color

beliebige Matplotlib Farbe

family

[ 'serif' | 'sans-serif' | 'cursive' | 'fantasy' | 'monospace' ]

fontproperties

FontProperties

horizontalalignment oder ha

[ 'center' | 'right' | 'left' ]

label

beliebiger String

linespacing

float

multialignment

['left' | 'right' | 'center' ]

name oder fontname

String z.B. ['Sans' | 'Courier' | 'Helvetica' ...]

picker

[None|float|bool|callable]

position

(x, y)

rotation

[ Winkel in Grad | 'vertical' | 'horizontal' ]

size oder fontsize

[ Größe in Punkten | relative Größe, z.B. 'smaller', 'x-large' ]

style oder fontstyle

[ 'normal' | 'italic' | 'oblique' ]

text

String oder alles, was mit der '%s'-Konvertierung druckbar ist

transform

Transform-Unterklasse

variant

[ 'normal' | 'small-caps' ]

verticalalignment oder va

[ 'center' | 'top' | 'bottom' | 'baseline' ]

visible

bool

weight oder fontweight

[ 'normal' | 'bold' | 'heavy' | 'light' | 'ultrabold' | 'ultralight']

x

float

y

float

zorder

beliebige Zahl

Sie können Text mit den Ausrichtungsargumenten horizontalalignment, verticalalignment und multialignment anordnen. horizontalalignment steuert, ob das x-Positionsargument für den Text die linke, mittlere oder rechte Seite der Textbegrenzungsbox angibt. verticalalignment steuert, ob das y-Positionsargument für den Text die untere, mittlere oder obere Seite der Textbegrenzungsbox angibt. multialignment, nur für zeilenweise getrennte Strings, steuert, ob die verschiedenen Zeilen links, mittig oder rechts ausgerichtet werden. Hier ist ein Beispiel, das den text()-Befehl verwendet, um die verschiedenen Ausrichtungsmöglichkeiten zu zeigen. Die Verwendung von transform=ax.transAxes im gesamten Code zeigt an, dass die Koordinaten relativ zur Begrenzungsbox der Achsen angegeben werden, wobei (0, 0) die untere linke Ecke der Achsen und (1, 1) die obere rechte Ecke ist.

import matplotlib.pyplot as plt

import matplotlib.patches as patches

# build a rectangle in axes coords
left, width = .25, .5
bottom, height = .25, .5
right = left + width
top = bottom + height

fig = plt.figure()
ax = fig.add_axes([0, 0, 1, 1])

# axes coordinates: (0, 0) is bottom left and (1, 1) is upper right
p = patches.Rectangle(
    (left, bottom), width, height,
    fill=False, transform=ax.transAxes, clip_on=False
    )

ax.add_patch(p)

ax.text(left, bottom, 'left top',
        horizontalalignment='left',
        verticalalignment='top',
        transform=ax.transAxes)

ax.text(left, bottom, 'left bottom',
        horizontalalignment='left',
        verticalalignment='bottom',
        transform=ax.transAxes)

ax.text(right, top, 'right bottom',
        horizontalalignment='right',
        verticalalignment='bottom',
        transform=ax.transAxes)

ax.text(right, top, 'right top',
        horizontalalignment='right',
        verticalalignment='top',
        transform=ax.transAxes)

ax.text(right, bottom, 'center top',
        horizontalalignment='center',
        verticalalignment='top',
        transform=ax.transAxes)

ax.text(left, 0.5*(bottom+top), 'right center',
        horizontalalignment='right',
        verticalalignment='center',
        rotation='vertical',
        transform=ax.transAxes)

ax.text(left, 0.5*(bottom+top), 'left center',
        horizontalalignment='left',
        verticalalignment='center',
        rotation='vertical',
        transform=ax.transAxes)

ax.text(0.5*(left+right), 0.5*(bottom+top), 'middle',
        horizontalalignment='center',
        verticalalignment='center',
        fontsize=20, color='red',
        transform=ax.transAxes)

ax.text(right, 0.5*(bottom+top), 'centered',
        horizontalalignment='center',
        verticalalignment='center',
        rotation='vertical',
        transform=ax.transAxes)

ax.text(left, top, 'rotated\nwith newlines',
        horizontalalignment='center',
        verticalalignment='center',
        rotation=45,
        transform=ax.transAxes)

ax.set_axis_off()
plt.show()
text props

Standard-Schriftart#

Die grundlegende Standard-Schriftart wird durch eine Reihe von rcParams gesteuert. Um die Schriftart für mathematische Ausdrücke einzustellen, verwenden Sie die rcParams, die mit mathtext beginnen (siehe mathtext).

rcParam

Verwendung

'font.family'

Liste von Schriftfamilien (auf dem Computer des Benutzers installiert) und/oder {'cursive', 'fantasy', 'monospace', 'sans', 'sans serif', 'sans-serif', 'serif'}.

'font.style'

Der Standardstil, z.B. 'normal', 'italic'.

'font.variant'

Standardvariante, z.B. 'normal', 'small-caps' (ungetestet)

'font.stretch'

Standard-Streckung, z.B. 'normal', 'condensed' (unvollständig)

'font.weight'

Standard-Schriftstärke. Entweder String oder Integer

'font.size'

Standard-Schriftgröße in Punkten. Relative Schriftgrößen ('large', 'x-small') werden relativ zu dieser Größe berechnet.

Matplotlib kann auf dem Computer des Benutzers installierte Schriftfamilien verwenden, d.h. Helvetica, Times usw. Schriftfamilien können auch mit generischen Familienaliassen angegeben werden, wie z.B. ({'cursive', 'fantasy', 'monospace', 'sans', 'sans serif', 'sans-serif', 'serif'}).

Hinweis

Um auf die vollständige Liste der verfügbaren Schriftarten zuzugreifen

matplotlib.font_manager.get_font_names()

Die Zuordnung zwischen den generischen Familienaliassen und tatsächlichen Schriftfamilien (erwähnt in Standard-rcParams) wird durch die folgenden rcParams gesteuert

CSS-basierter generischer Familienalias

rcParam mit Zuordnungen

'serif'

'font.serif'

'monospace'

'font.monospace'

'fantasy'

'font.fantasy'

'cursive'

'font.cursive'

{'sans', 'sans serif', 'sans-serif'}

'font.sans-serif'

Wenn ein generischer Familienname in 'font.family' vorkommt, ersetzen wir diesen Eintrag durch alle Einträge in der entsprechenden rcParam-Zuordnung. Zum Beispiel

matplotlib.rcParams['font.family'] = ['Family1', 'serif', 'Family2']
matplotlib.rcParams['font.serif'] = ['SerifFamily1', 'SerifFamily2']

# This is effectively translated to:
matplotlib.rcParams['font.family'] = ['Family1', 'SerifFamily1', 'SerifFamily2', 'Family2']

Text mit nicht-lateinischen Glyphen#

Ab Version 2.0 enthält die Standard-Schriftart DejaVu Glyphen für viele westliche Alphabete, aber nicht für andere Schriftsysteme wie Chinesisch, Koreanisch oder Japanisch.

Um die Standard-Schriftart so einzustellen, dass sie die benötigten Codepunkte unterstützt, stellen Sie den Schriftartnamen voran ('font.family' (empfohlen) oder zu den gewünschten Aliaslisten).

# first method
matplotlib.rcParams['font.family'] = ['Source Han Sans TW', 'sans-serif']

# second method
matplotlib.rcParams['font.family'] = ['sans-serif']
matplotlib.rcParams['sans-serif'] = ['Source Han Sans TW', ...]

Die generischen Familienaliaslisten enthalten Schriftarten, die entweder zusammen mit Matplotlib ausgeliefert werden (daher ist die Wahrscheinlichkeit, sie zu finden, 100%) oder Schriftarten, die mit sehr hoher Wahrscheinlichkeit auf den meisten Systemen vorhanden sind.

Es ist eine gute Praxis, beim Festlegen benutzerdefinierter Schriftfamilien eine generische Familie als letzte Option an die Schriftfamilienliste anzuhängen.

Sie können dies auch in Ihrer .matplotlibrc-Datei festlegen

font.family: Source Han Sans TW, Arial, sans-serif

Um die auf Künstlerbasis verwendete Schriftart zu steuern, verwenden Sie die Schlüsselwörter *name*, *fontname* oder *fontproperties*, die in Text-Eigenschaften und Layout dokumentiert sind.

Unter Linux kann fc-list ein nützliches Werkzeug sein, um den Schriftartnamen zu ermitteln. Zum Beispiel

$ fc-list :lang=zh family
Noto to Sans Mono CJK TC,Noto Sans Mono CJK TC Bold
Noto Sans CJK TC,Noto Sans CJK TC Medium
Noto Sans CJK TC,Noto Sans CJK TC DemiLight
Noto Sans CJK KR,Noto Sans CJK KR Black
Noto Sans CJK TC,Noto Sans CJK TC Black
Noto Sans Mono CJK TC,Noto Sans Mono CJK TC Regular
Noto Sans CJK SC,Noto Sans CJK SC Light

listet alle Schriftarten auf, die Chinesisch unterstützen.

Galerie generiert von Sphinx-Gallery