Verwandeln Sie langweilige Normal-Matplotlib-Liniendiagramme in atemberaubende, individuelle Visualisierungen
Jeder, der Matplotlib verwendet hat, weiß, wie hässlich die Standarddiagramme aussehen. In dieser Beitragsreihe verrate ich Ihnen einige Methods, mit denen Sie Ihre Visualisierungen hervorstechen lassen und Ihren individuellen Stil widerspiegeln.
Wir beginnen mit einem einfachen Liniendiagramm, das weit verbreitet ist. Das größte Spotlight wird das Hinzufügen einer Farbverlaufsfüllung unterhalb des Plots sein – eine Aufgabe, die nicht ganz einfach ist.
Lassen Sie uns additionally eintauchen und alle wichtigen Schritte dieser Transformation durchgehen!
Lassen Sie uns zunächst alle notwendigen Importe durchführen.
import pandas as pd
import numpy as np
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
from matplotlib import rcParams
from matplotlib.path import Path
from matplotlib.patches import PathPatchnp.random.seed(38)
Jetzt müssen wir Beispieldaten für unsere Visualisierung generieren. Wir werden etwas Ähnliches erstellen, wie die Aktienkurse aussehen.
dates = pd.date_range(begin='2024-02-01', durations=100, freq='D')
initial_rate = 75
drift = 0.003
volatility = 0.1
returns = np.random.regular(drift, volatility, len(dates))
charges = initial_rate * np.cumprod(1 + returns)x, y = dates, charges
Sehen wir uns an, wie es mit den Standardeinstellungen von Matplotlib aussieht.
repair, ax = plt.subplots(figsize=(8, 4))
ax.plot(dates, charges)
ax.xaxis.set_major_locator(mdates.DayLocator(interval=30))
plt.present()
Nicht wirklich faszinierend, oder? Aber wir werden es nach und nach besser aussehen lassen.
- den Titel festlegen
- Legen Sie allgemeine Diagrammparameter fest – Größe und Schriftart
- Platzieren Sie die Y-Häkchen rechts
- Ändern der Farbe, des Stils und der Breite der Hauptlinie
# Basic parameters
fig, ax = plt.subplots(figsize=(10, 6))
plt.title("Each day guests", fontsize=18, shade="black")
rcParams('font.household') = 'DejaVu Sans'
rcParams('font.measurement') = 14# Axis Y to the proper
ax.yaxis.tick_right()
ax.yaxis.set_label_position("proper")
# Plotting fundamental line
ax.plot(dates, charges, shade='#268358', linewidth=2)
Okay, jetzt sieht es etwas sauberer aus.
Jetzt möchten wir dem Hintergrund ein minimalistisches Raster hinzufügen, Ränder für ein klareres Erscheinungsbild entfernen und Häkchen von der Y-Achse entfernen.
# Grid
ax.grid(shade="grey", linestyle=(0, (10, 10)), linewidth=0.5, alpha=0.6)
ax.tick_params(axis="x", colours="black")
ax.tick_params(axis="y", left=False, labelleft=False) # Borders
ax.spines("prime").set_visible(False)
ax.spines('proper').set_visible(False)
ax.spines("backside").set_color("black")
ax.spines('left').set_color('white')
ax.spines('left').set_linewidth(1)
# Take away ticks from axis Y
ax.tick_params(axis='y', size=0)
Jetzt fügen wir ein ästhetisches Element hinzu – das Jahr in der Nähe des ersten Häkchens auf der X-Achse. Außerdem machen wir die Schriftfarbe der Häkchenbeschriftungen blasser.
# Add yr to the primary date on the axis
def custom_date_formatter(t, pos, dates, x_interval):
date = dates(pos*x_interval)
if pos == 0:
return date.strftime('%d %b '%y')
else:
return date.strftime('%d %b')
ax.xaxis.set_major_formatter(ticker.FuncFormatter((lambda x, pos: custom_date_formatter(x, pos, dates=dates, x_interval=x_interval))))# Ticks label shade
(t.set_color('#808079') for t in ax.yaxis.get_ticklabels())
(t.set_color('#808079') for t in ax.xaxis.get_ticklabels())
Und wir nähern uns dem schwierigsten Second – dem Erstellen eines Farbverlaufs unter der Kurve. Eigentlich gibt es in Matplotlib keine solche Choice, aber wir können es simulieren, indem wir ein Verlaufsbild erstellen und es dann mit dem Diagramm beschneiden.
# Gradient
numeric_x = np.array((i for i in vary(len(x))))
numeric_x_patch = np.append(numeric_x, max(numeric_x))
numeric_x_patch = np.append(numeric_x_patch(0), numeric_x_patch)
y_patch = np.append(y, 0)
y_patch = np.append(0, y_patch)path = Path(np.array((numeric_x_patch, y_patch)).transpose())
patch = PathPatch(path, facecolor='none')
plt.gca().add_patch(patch)
ax.imshow(numeric_x.reshape(len(numeric_x), 1), interpolation="bicubic",
cmap=plt.cm.Greens,
origin='decrease',
alpha=0.3,
extent=(min(numeric_x), max(numeric_x), min(y_patch), max(y_patch) * 1.2),
facet="auto", clip_path=patch, clip_on=True)
Jetzt sieht es sauber und schön aus. Wir müssen lediglich mit einem beliebigen Editor (ich bevorzuge Google Slides) einige Particulars hinzufügen – Titel, runde Rahmenecken und einige numerische Indikatoren.
Der vollständige Code zum Reproduzieren der Visualisierung ist unten: