Erstellen von Diagrammen mit unterbrochener Achse in Python

MatplotlibMatplotlibBeginner
Jetzt üben

This tutorial is from open-source community. Access the source code

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Die Datenvisualisierung stellt oft Herausforderungen dar, wenn es um Ausreißer geht. Diese extremen Werte können die Mehrheit Ihrer Datenpunkte komprimieren, was es schwierig macht, wichtige Muster oder Details zu beobachten. Ein Diagramm mit unterbrochener Achse bietet eine elegante Lösung, indem es die Achse "unterbricht", um verschiedene Wertebereiche anzuzeigen. Dadurch können Sie sich gleichzeitig auf die Hauptverteilung der Daten und die Ausreißer konzentrieren.

In diesem Tutorial lernen wir, wie man ein Diagramm mit unterbrochener Achse mit Matplotlib in Python erstellt. Diese Technik ist besonders nützlich, wenn man Datensätze mit großen Wertunterschieden visualisiert, da sie eine klarere Darstellung sowohl der normalen Daten als auch der extremen Werte ermöglicht.

Tipps zur virtuellen Maschine (VM)

Nachdem der Start der virtuellen Maschine abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und auf Jupyter Notebook für die Übung zuzugreifen.

click-notebook

Sie müssen möglicherweise einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Aufgrund der Einschränkungen von Jupyter Notebook kann die Validierung der Operationen nicht automatisiert werden.

Wenn Sie während dieses Labs auf Probleme stoßen, können Sie sich gerne an Labby wenden, um Hilfe zu erhalten. Bitte geben Sie uns nach der Sitzung Feedback, damit wir die Probleme, die Sie hatten, umgehend beheben können.

Vorbereitung der Umgebung und Erstellung von Daten

In diesem ersten Schritt richten wir unsere Arbeitsumgebung ein, indem wir die erforderlichen Bibliotheken importieren und Stichprobedaten für unsere Visualisierung erstellen. Wir werden uns darauf konzentrieren, Daten zu generieren, die einige Ausreißer enthalten, um den Nutzen eines Diagramms mit unterbrochener Achse zu demonstrieren.

Importieren der erforderlichen Bibliotheken

Beginnen wir damit, die Bibliotheken zu importieren, die wir für dieses Tutorial benötigen. Wir werden Matplotlib zur Erstellung unserer Visualisierungen und NumPy zur Generierung und Manipulation von numerischen Daten verwenden.

Erstellen Sie eine neue Zelle in Ihrem Jupyter Notebook und geben Sie den folgenden Code ein:

import matplotlib.pyplot as plt
import numpy as np

print(f"NumPy version: {np.__version__}")

Wenn Sie diese Zelle ausführen, sollten Sie eine Ausgabe ähnlich der folgenden sehen:

NumPy version: 2.0.0
numpy-version

Die genauen Versionsnummern können je nach Ihrer Umgebung variieren, aber dies bestätigt, dass die Bibliotheken ordnungsgemäß installiert und einsatzbereit sind.

Generieren von Stichprobedaten mit Ausreißern

Jetzt erstellen wir einen Stichprobedatensatz, der einige Ausreißer enthält. Wir werden Zufallszahlen generieren und dann absichtlich größere Werte an bestimmte Positionen hinzufügen, um unsere Ausreißer zu erstellen.

Erstellen Sie eine neue Zelle und fügen Sie den folgenden Code hinzu:

## Set random seed for reproducibility
np.random.seed(19680801)

## Generate 30 random points with values between 0 and 0.2
pts = np.random.rand(30) * 0.2

## Add 0.8 to two specific points to create outliers
pts[[3, 14]] += 0.8

## Display the first few data points to understand our dataset
print("First 10 data points:")
print(pts[:10])
print("\nData points containing outliers:")
print(pts[[3, 14]])

Wenn Sie diese Zelle ausführen, sollten Sie eine Ausgabe ähnlich der folgenden sehen:

First 10 data points:
[0.01182225 0.11765474 0.07404329 0.91088185 0.10502995 0.11190702
 0.14047499 0.01060192 0.15226977 0.06145634]

Data points containing outliers:
[0.91088185 0.97360754]

In dieser Ausgabe können Sie deutlich sehen, dass die Werte an den Indizes 3 und 14 viel größer sind als die anderen Werte. Dies sind unsere Ausreißer. Die meisten unserer Datenpunkte liegen unter 0,2, aber diese beiden Ausreißer liegen über 0,9, was in unserem Datensatz eine erhebliche Diskrepanz schafft.

Diese Art der Datenverteilung ist perfekt, um den Nutzen eines Diagramms mit unterbrochener Achse zu demonstrieren. Im nächsten Schritt werden wir die Diagrammstruktur erstellen und sie so konfigurieren, dass sowohl die Hauptdaten als auch die Ausreißer richtig angezeigt werden.

Erstellung und Konfiguration des Diagramms mit unterbrochener Achse

In diesem Schritt werden wir die eigentliche Struktur des Diagramms mit unterbrochener Achse erstellen. Ein Diagramm mit unterbrochener Achse besteht aus mehreren Teilplots, die verschiedene Bereiche derselben Daten anzeigen. Wir werden diese Teilplots so konfigurieren, dass unsere Hauptdaten und Ausreißer effektiv dargestellt werden.

Erstellung der Teilplots

Zunächst müssen wir zwei vertikal angeordnete Teilplots erstellen. Der obere Teilplot wird unsere Ausreißer anzeigen, während der untere Teilplot die Mehrheit unserer Datenpunkte zeigen wird.

Erstellen Sie eine neue Zelle in Ihrem Notebook und fügen Sie den folgenden Code hinzu:

## Create two subplots stacked vertically with shared x-axis
fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True, figsize=(8, 6))

## Add a main title to the figure
fig.suptitle('Broken Axis Plot Example', fontsize=16)

## Plot the same data on both axes
ax1.plot(pts, 'o-', color='blue')
ax2.plot(pts, 'o-', color='blue')

## Display the figure to see both subplots
plt.tight_layout()
plt.show()
broken-axis-plot

Wenn Sie diese Zelle ausführen, sollten Sie ein Diagramm mit zwei Teilplots sehen, die beide dieselben Daten anzeigen. Beachten Sie, wie die Ausreißer den Rest der Daten in beiden Plots komprimieren, was es schwierig macht, die Details der Mehrheit der Datenpunkte zu sehen. Dies ist genau das Problem, das wir mit einem Diagramm mit unterbrochener Achse lösen möchten.

Konfiguration der y-Achsengrenzen

Jetzt müssen wir jeden Teilplot so konfigurieren, dass er sich auf einen bestimmten Bereich von y-Werten konzentriert. Der obere Teilplot wird sich auf den Bereich der Ausreißer konzentrieren, während der untere Teilplot sich auf den Bereich der Hauptdaten konzentrieren wird.

Erstellen Sie eine neue Zelle und fügen Sie den folgenden Code hinzu:

## Create two subplots stacked vertically with shared x-axis
fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True, figsize=(8, 6))

## Plot the same data on both axes
ax1.plot(pts, 'o-', color='blue')
ax2.plot(pts, 'o-', color='blue')

## Set y-axis limits for each subplot
ax1.set_ylim(0.78, 1.0)    ## Top subplot shows only the outliers
ax2.set_ylim(0, 0.22)      ## Bottom subplot shows only the main data

## Add a title to each subplot
ax1.set_title('Outlier Region')
ax2.set_title('Main Data Region')

## Display the figure with adjusted y-axis limits
plt.tight_layout()
plt.show()

Wenn Sie diese Zelle ausführen, sollten Sie sehen, dass sich jeder Teilplot jetzt auf einen anderen Bereich von y-Werten konzentriert. Der obere Plot zeigt nur die Ausreißer, und der untere Plot zeigt nur die Hauptdaten. Dies verbessert bereits die Visualisierung, aber um es zu einem richtigen Diagramm mit unterbrochener Achse zu machen, müssen wir noch einige Konfigurationen hinzufügen.

Ausblenden der Achsenlinien und Anpassen der Tick-Markierungen

Um die Illusion einer "unterbrochenen" Achse zu schaffen, müssen wir die verbindenden Achsenlinien zwischen den beiden Teilplots ausblenden und die Positionen der Tick-Markierungen anpassen.

Erstellen Sie eine neue Zelle und fügen Sie den folgenden Code hinzu:

## Create two subplots stacked vertically with shared x-axis
fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True, figsize=(8, 6))

## Plot the same data on both axes
ax1.plot(pts, 'o-', color='blue')
ax2.plot(pts, 'o-', color='blue')

## Set y-axis limits for each subplot
ax1.set_ylim(0.78, 1.0)    ## Top subplot shows only the outliers
ax2.set_ylim(0, 0.22)      ## Bottom subplot shows only the main data

## Hide the spines between ax1 and ax2
ax1.spines.bottom.set_visible(False)
ax2.spines.top.set_visible(False)

## Adjust the position of the ticks
ax1.xaxis.tick_top()          ## Move x-axis ticks to the top
ax1.tick_params(labeltop=False)  ## Hide x-axis tick labels at the top
ax2.xaxis.tick_bottom()       ## Keep x-axis ticks at the bottom

## Add labels to the plot
ax2.set_xlabel('Data Point Index')
ax2.set_ylabel('Value')
ax1.set_ylabel('Value')

plt.tight_layout()
plt.show()

Wenn Sie diese Zelle ausführen, sollten Sie sehen, dass das Diagramm jetzt die Achsenlinien zwischen den beiden Teilplots ausblendet, was ein saubereres Erscheinungsbild schafft. Die Tick-Markierungen der x-Achse sind jetzt korrekt positioniert, wobei die Beschriftungen nur am unteren Rand angezeigt werden.

An diesem Punkt haben wir erfolgreich ein einfaches Diagramm mit unterbrochener Achse erstellt. Im nächsten Schritt werden wir noch einige Feinheiten hinzufügen, um den Betrachtern klar zu machen, dass die Achse unterbrochen ist.

Hinzufügen von Feinheiten zum Diagramm mit unterbrochener Achse

In diesem letzten Schritt werden wir unserem Diagramm mit unterbrochener Achse Feinheiten hinzufügen, um deutlich zu machen, dass die y-Achse unterbrochen ist. Wir werden diagonale Linien zwischen den Teilplots hinzufügen, um die Unterbrechung anzuzeigen, und das Gesamtaussehen des Diagramms mit geeigneten Beschriftungen und einem Gitter verbessern.

Hinzufügen von diagonalen Unterbrechungslinien

Um visuell anzuzeigen, dass die Achse unterbrochen ist, werden wir diagonale Linien zwischen den beiden Teilplots hinzufügen. Dies ist eine gängige Konvention, die den Betrachtern hilft zu verstehen, dass ein Teil der Achse weggelassen wurde.

Erstellen Sie eine neue Zelle und fügen Sie den folgenden Code hinzu:

## Create two subplots stacked vertically with shared x-axis
fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True, figsize=(8, 6))

## Plot the same data on both axes
ax1.plot(pts, 'o-', color='blue')
ax2.plot(pts, 'o-', color='blue')

## Set y-axis limits for each subplot
ax1.set_ylim(0.78, 1.0)    ## Top subplot shows only the outliers
ax2.set_ylim(0, 0.22)      ## Bottom subplot shows only the main data

## Hide the spines between ax1 and ax2
ax1.spines.bottom.set_visible(False)
ax2.spines.top.set_visible(False)

## Adjust the position of the ticks
ax1.xaxis.tick_top()          ## Move x-axis ticks to the top
ax1.tick_params(labeltop=False)  ## Hide x-axis tick labels at the top
ax2.xaxis.tick_bottom()       ## Keep x-axis ticks at the bottom

## Add diagonal break lines
d = 0.5  ## proportion of vertical to horizontal extent of the slanted line
kwargs = dict(marker=[(-1, -d), (1, d)], markersize=12,
              linestyle='none', color='k', mec='k', mew=1, clip_on=False)
ax1.plot([0, 1], [0, 0], transform=ax1.transAxes, **kwargs)
ax2.plot([0, 1], [1, 1], transform=ax2.transAxes, **kwargs)

## Add labels and a title
ax2.set_xlabel('Data Point Index')
ax2.set_ylabel('Value')
ax1.set_ylabel('Value')
fig.suptitle('Dataset with Outliers', fontsize=16)

## Add a grid to both subplots for better readability
ax1.grid(True, linestyle='--', alpha=0.7)
ax2.grid(True, linestyle='--', alpha=0.7)

plt.tight_layout()
plt.subplots_adjust(hspace=0.1)  ## Adjust the space between subplots
plt.show()

Wenn Sie diese Zelle ausführen, sollten Sie das vollständige Diagramm mit unterbrochener Achse sehen, mit diagonalen Linien, die die Unterbrechung der y-Achse anzeigen. Das Diagramm hat jetzt einen Titel, Achsenbeschriftungen und Gitterlinien, um die Lesbarkeit zu verbessern.

Verständnis des Diagramms mit unterbrochener Achse

Nehmen wir einen Moment Zeit, um die Schlüsselkomponenten unseres Diagramms mit unterbrochener Achse zu verstehen:

  1. Zwei Teilplots: Wir haben zwei separate Teilplots erstellt, die sich jeweils auf einen anderen Bereich von y-Werten konzentrieren.
  2. Ausgeblendete Achsenlinien: Wir haben die verbindenden Achsenlinien zwischen den Teilplots ausgeblendet, um eine visuelle Trennung zu schaffen.
  3. Diagonale Unterbrechungslinien: Wir haben diagonale Linien hinzugefügt, um anzuzeigen, dass die Achse unterbrochen ist.
  4. y-Achsengrenzen: Wir haben für jeden Teilplot unterschiedliche y-Achsengrenzen festgelegt, um uns auf bestimmte Teile der Daten zu konzentrieren.
  5. Gitterlinien: Wir haben Gitterlinien hinzugefügt, um die Lesbarkeit zu verbessern und es einfacher zu machen, Werte abzuschätzen.

Diese Technik ist besonders nützlich, wenn Sie in Ihren Daten Ausreißer haben, die sonst die Visualisierung der Mehrheit Ihrer Datenpunkte komprimieren würden. Durch das "Unterbrechen" der Achse können Sie sowohl die Ausreißer als auch die Hauptdatenverteilung deutlich in einem einzigen Diagramm anzeigen.

Experimentieren mit dem Diagramm

Jetzt, da Sie verstehen, wie Sie ein Diagramm mit unterbrochener Achse erstellen, können Sie mit verschiedenen Konfigurationen experimentieren. Versuchen Sie, die y-Achsengrenzen zu ändern, weitere Merkmale zum Diagramm hinzuzufügen oder diese Technik auf Ihre eigenen Daten anzuwenden.

Beispielsweise können Sie den vorherigen Code ändern, um eine Legende hinzuzufügen, das Farbschema zu ändern oder die Markierungsstile anzupassen:

## Create two subplots stacked vertically with shared x-axis
fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True, figsize=(8, 6))

## Plot the same data on both axes with different styles
ax1.plot(pts, 'o-', color='darkblue', label='Data Points', linewidth=2)
ax2.plot(pts, 'o-', color='darkblue', linewidth=2)

## Mark the outliers with a different color
outlier_indices = [3, 14]
ax1.plot(outlier_indices, pts[outlier_indices], 'ro', markersize=8, label='Outliers')

## Set y-axis limits for each subplot
ax1.set_ylim(0.78, 1.0)    ## Top subplot shows only the outliers
ax2.set_ylim(0, 0.22)      ## Bottom subplot shows only the main data

## Hide the spines between ax1 and ax2
ax1.spines.bottom.set_visible(False)
ax2.spines.top.set_visible(False)

## Adjust the position of the ticks
ax1.xaxis.tick_top()          ## Move x-axis ticks to the top
ax1.tick_params(labeltop=False)  ## Hide x-axis tick labels at the top
ax2.xaxis.tick_bottom()       ## Keep x-axis ticks at the bottom

## Add diagonal break lines
d = 0.5  ## proportion of vertical to horizontal extent of the slanted line
kwargs = dict(marker=[(-1, -d), (1, d)], markersize=12,
              linestyle='none', color='k', mec='k', mew=1, clip_on=False)
ax1.plot([0, 1], [0, 0], transform=ax1.transAxes, **kwargs)
ax2.plot([0, 1], [1, 1], transform=ax2.transAxes, **kwargs)

## Add labels and a title
ax2.set_xlabel('Data Point Index')
ax2.set_ylabel('Value')
ax1.set_ylabel('Value')
fig.suptitle('Dataset with Outliers - Enhanced Visualization', fontsize=16)

## Add a grid to both subplots for better readability
ax1.grid(True, linestyle='--', alpha=0.7)
ax2.grid(True, linestyle='--', alpha=0.7)

## Add a legend to the top subplot
ax1.legend(loc='upper right')

plt.tight_layout()
plt.subplots_adjust(hspace=0.1)  ## Adjust the space between subplots
plt.show()

Wenn Sie diesen erweiterten Code ausführen, sollten Sie eine verbesserte Visualisierung sehen, bei der die Ausreißer speziell markiert sind und eine Legende die Datenpunkte erklärt.

Herzlichen Glückwunsch! Sie haben erfolgreich ein Diagramm mit unterbrochener Achse in Python mit Matplotlib erstellt. Diese Technik wird Ihnen helfen, effektivere Visualisierungen zu erstellen, wenn Sie mit Daten umgehen, die Ausreißer enthalten.

Zusammenfassung

In diesem Tutorial haben Sie gelernt, wie Sie mit Matplotlib in Python ein Diagramm mit unterbrochener Achse erstellen. Diese Visualisierungstechnik ist wertvoll, wenn Sie mit Daten umgehen, die Ausreißer enthalten, da sie es Ihnen ermöglicht, sowohl die Hauptdatenverteilung als auch die Ausreißer deutlich in einem einzigen Diagramm anzuzeigen.

Hier ist eine Zusammenfassung dessen, was Sie erreicht haben:

  1. Umgebungseinrichtung und Datenerstellung: Sie haben die erforderlichen Bibliotheken importiert und Beispieldaten mit Ausreißern erstellt, um das Konzept zu demonstrieren.

  2. Erstellung der grundlegenden Diagrammstruktur: Sie haben zwei Teilplots mit unterschiedlichen y-Achsengrenzen erstellt, um sich auf verschiedene Wertebereiche zu konzentrieren, und das Erscheinungsbild der Achsen konfiguriert.

  3. Verbesserung der Visualisierung: Sie haben diagonale Unterbrechungslinien hinzugefügt, um die unterbrochene Achse anzuzeigen, das Erscheinungsbild des Diagramms mit Beschriftungen und einem Gitter verbessert und gelernt, wie Sie die Visualisierung weiter anpassen können.

Die Technik der unterbrochenen Achse löst ein häufiges Problem bei der Datenvisualisierung, indem es den Betrachtern ermöglicht, sowohl die Gesamtstruktur als auch die Details eines Datensatzes gleichzeitig zu sehen, selbst wenn Ausreißer normalerweise die Visualisierung der Mehrheit der Datenpunkte komprimieren würden.

Sie können diese Technik in Ihren eigenen Datenanalyse- und Visualisierungsaufgaben anwenden, wann immer Sie Daten mit deutlich unterschiedlichen Wertebereichen klar und effektiv darstellen müssen.