Matplotlib benutzerdefinierter SI-Präfix-Einheiten-Tick-Formatter

English Deutsch

Du kannst UliEngineerings format_value() verwenden, um einfach einen benutzerdefinierten matplotlib-Tick-Formatter zu erstellen, der Werte mit SI-Präfixen wie k, M, G, T, … formatiert.

Formatieren der Y-Achsen-Ticks

Das folgende Beispiel formatiert die Y-Achse in der Einheit J (Joule). Beispielsweise würde 100000 als 100 kJ formatiert werden.

Die Formatter-Funktion, die wir verwenden, ist

format_joules_fn.py
def format_joules(value, pos=None):
    return format_value(value, 'J')

Um die Formatter-Funktion zu setzen, verwende

set_y_formatter.py
# Unseren Formatter als Y-Achsen-Formatter setzen
plt.gca().yaxis.set_major_formatter(mtick.FuncFormatter(format_joules))

Beispiel:

si_formatter_example.py
import matplotlib.ticker as mtick
from UliEngineering.EngineerIO import format_value
from matplotlib import pyplot as plt

def format_joules(value, pos=None):
    return format_value(value, 'J')

# Unseren Formatter als Y-Achsen-Formatter setzen
plt.gca().yaxis.set_major_formatter(mtick.FuncFormatter(format_joules))

Formatieren der X-Achsen-Ticks

Um stattdessen die X-Achsen-Ticks zu formatieren, verwende dieselbe Formatter-Funktion, aber aktiviere sie mit

set_x_formatter.py
# Unseren Formatter als Y-Achsen-Formatter setzen
plt.gca().xaxis.set_major_formatter(mtick.FuncFormatter(format_joules))

Matplotlib-Plot mit SI-Präfix-Einheiten-Formatter auf der X-Achse

Anzahl der Nachkommastellen festlegen

UliEngineerings format_value() ermöglicht dir, die Nachkommastellen z.B. mit significant_digits=4 festzulegen

format_joules_sigdigits.py
def format_joules(value, pos=None):
    return format_value(value, 'J', significant_digits=4)

Vollständiges Beispiel

Dieses Beispiel erzeugt den oben gezeigten Y-Achsen-Plot

mpl_si_formatter_full_example.py
import matplotlib.ticker as mtick
from UliEngineering.EngineerIO import format_value
from matplotlib import pyplot as plt
plt.style.use("ggplot")
import numpy as np

def format_joules(value, pos=None):
    return format_value(value, 'J')

# Unseren Formatter als Y-Achsen-Formatter setzen
plt.gca().yaxis.set_major_formatter(mtick.FuncFormatter(format_joules))

# Testdaten generieren
test_data = np.arange(1, 1.2e6)
plt.plot(test_data)
plt.gcf().set_size_inches(10,5)
plt.savefig("/ram/mpl-si-formatter.svg")

Check out similar posts by category: Python