Einführung
In diesem Lab lernst du, wie du das Matplotlib-Logo mit Python erstellen kannst. Die Matplotlib-Bibliothek ist ein beliebtes Datenvisualisierungstool für Python und wird in der wissenschaftlichen Informatik weit verbreitet eingesetzt.
Tipps für die VM
Nachdem der VM-Start abgeschlossen ist, klicke in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu nutzen.
Manchmal musst du einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund der Einschränkungen in Jupyter Notebook nicht automatisiert werden.
Wenn du bei der Lernphase Probleme hast, kannst du Labby gerne fragen. Gib nach der Sitzung Feedback, und wir werden das Problem für dich prompt beheben.
Importieren der erforderlichen Bibliotheken
In diesem Schritt importieren wir die erforderlichen Bibliotheken, einschließlich Matplotlib und NumPy.
import matplotlib.pyplot as plt
import numpy as np
Definition von Konstanten
In diesem Schritt definieren wir einige Konstanten, einschließlich der Farbe des Logos und der Schriftart.
MPL_BLUE = '#11557c'
def get_font_properties():
## Die ursprüngliche Schriftart ist Calibri. Wenn diese nicht installiert ist,
## greifen wir auf Carlito zurück, die metrisch gleichwertig ist.
if 'Calibri' in matplotlib.font_manager.findfont('Calibri:bold'):
return matplotlib.font_manager.FontProperties(family='Calibri',
weight='bold')
if 'Carlito' in matplotlib.font_manager.findfont('Carlito:bold'):
print('Ursprüngliche Schriftart nicht gefunden. Wechsel zu Carlito. '
'Der Logotext wird nicht in der richtigen Schriftart erscheinen.')
return matplotlib.font_manager.FontProperties(family='Carlito',
weight='bold')
print('Ursprüngliche Schriftart nicht gefunden. '
'Der Logotext wird nicht in der richtigen Schriftart erscheinen.')
return None
Erstellen der Icon-Achsen
In diesem Schritt erstellen wir eine Polarkoordinate, die den Matplotlib-Radarplot enthält.
def create_icon_axes(fig, ax_position, lw_bars, lw_grid, lw_border, rgrid):
"""
Erstellt eine Polarkoordinate, die den matplotlib-Radarplot enthält.
Parameter
----------
fig : matplotlib.figure.Figure
Die Figur, in die gezeichnet werden soll.
ax_position : (float, float, float, float)
Die Position der erstellten Achse in Figurkoordinaten als
(x, y, Breite, Höhe).
lw_bars : float
Die Linienstärke der Balken.
lw_grid : float
Die Linienstärke des Gitters.
lw_border : float
Die Linienstärke der Achsengrenze.
rgrid : array-like
Positionen des radialen Gitters.
Rückgabe
-------
ax : matplotlib.axes.Axes
Die erstellte Achse.
"""
with plt.rc_context({'axes.edgecolor': MPL_BLUE,
'axes.linewidth': lw_border}):
ax = fig.add_axes(ax_position, projection='polar')
ax.set_axisbelow(True)
N = 7
arc = 2. * np.pi
theta = np.arange(0.0, arc, arc / N)
radii = np.array([2, 6, 8, 7, 4, 5, 8])
width = np.pi / 4 * np.array([0.4, 0.4, 0.6, 0.8, 0.2, 0.5, 0.3])
bars = ax.bar(theta, radii, width=width, bottom=0.0, align='edge',
edgecolor='0.3', lw=lw_bars)
for r, bar in zip(radii, bars):
color = *cm.jet(r / 10.)[:3], 0.6 ## Farbe aus jet mit alpha=0.6
bar.set_facecolor(color)
ax.tick_params(labelbottom=False, labeltop=False,
labelleft=False, labelright=False)
ax.grid(lw=lw_grid, color='0.9')
ax.set_rmax(9)
ax.set_yticks(rgrid)
## der tatsächliche sichtbare Hintergrund - erstreckt sich etwas über die Achse hinaus
ax.add_patch(Rectangle((0, 0), arc, 9.58,
facecolor='white', zorder=0,
clip_on=False, in_layout=False))
return ax
Erstellen der Textachsen
In diesem Schritt erstellen wir eine Achse in fig, die 'matplotlib' als Text enthält.
def create_text_axes(fig, height_px):
"""Erstellt eine Achse in *fig*, die 'matplotlib' als Text enthält."""
ax = fig.add_axes((0, 0, 1, 1))
ax.set_aspect("equal")
ax.set_axis_off()
path = TextPath((0, 0), "matplotlib", size=height_px * 0.8,
prop=get_font_properties())
angle = 4.25 ## Grad
trans = mtrans.Affine2D().skew_deg(angle, 0)
patch = PathPatch(path, transform=trans + ax.transData, color=MPL_BLUE,
lw=0)
ax.add_patch(patch)
ax.autoscale()
Erstellen des Logos
In diesem Schritt erstellen wir die vollständige Figur mit dem Matplotlib-Logo.
def make_logo(height_px, lw_bars, lw_grid, lw_border, rgrid, with_text=False):
"""
Erstellt eine vollständige Figur mit dem Matplotlib-Logo.
Parameter
----------
height_px : int
Höhe der Figur in Pixeln.
lw_bars : float
Die Linienstärke der Balkengrenzen.
lw_grid : float
Die Linienstärke des Gitters.
lw_border : float
Die Linienstärke der Icon-Grenze.
rgrid : Folge von float
Die Positionen des radialen Gitters.
with_text : bool
Ob nur das Icon gezeichnet werden soll oder 'matplotlib' als Text enthalten sein soll.
"""
dpi = 100
height = height_px / dpi
figsize = (5 * height, height) wenn with_text sonst (height, height)
fig = plt.figure(figsize=figsize, dpi=dpi)
fig.patch.set_alpha(0)
Wenn with_text:
create_text_axes(fig, height_px)
ax_pos = (0.535, 0.12,.17, 0.75) wenn with_text sonst (0.03, 0.03,.94,.94)
ax = create_icon_axes(fig, ax_pos, lw_bars, lw_grid, lw_border, rgrid)
return fig, ax
Anzeigen der Logos
In diesem Schritt werden wir die Matplotlib-Logos in verschiedenen Größen anzeigen.
## Ein großes Logo:
make_logo(height_px=110, lw_bars=0.7, lw_grid=0.5, lw_border=1,
rgrid=[1, 3, 5, 7])
## Ein kleines 32px-Logo:
make_logo(height_px=32, lw_bars=0.3, lw_grid=0.3, lw_border=0.3, rgrid=[5])
## Ein großes Logo mit Text, wie es auf der Matplotlib-Website verwendet wird.
make_logo(height_px=110, lw_bars=0.7, lw_grid=0.5, lw_border=1,
rgrid=[1, 3, 5, 7], with_text=True)
plt.show()
Zusammenfassung
In diesem Lab haben Sie gelernt, wie man das Matplotlib-Logo mit Python erstellt. Indem Sie den obigen Schritten folgen, können Sie das Logo an Ihre Bedürfnisse und Vorlieben anpassen.