Verwandeln Sie langweilige Normal-Matplotlib-Liniendiagramme in atemberaubende, individuelle Visualisierungen

Cowl, Bild vom Autor

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 PathPatch

np.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()
Standardplot, Bild vom Autor

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)

Allgemeine Parameter angewendet, Bild vom Autor

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)

Raster hinzugefügt, Bild vom Autor

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())

Jahr in der Nähe des ersten Dates, Bild vom Autor

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)

Farbverlauf hinzugefügt, Bild vom Autor

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.

Endgültige Visualisierung, Bild vom Autor

Der vollständige Code zum Reproduzieren der Visualisierung ist unten:

Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert