Violinplot mit Seaborn
Die Funktion violinplot()
erstellt einen solchen Graphen und stellt die Verteilung wie eine Kombination aus Kernel-Density-Graph und Boxplot dar. Es wird häufig von Analytikern und Statistikern verwendet, um die Verteilung kategorialer Daten zu verstehen. Der Hauptvorteil gegenüber den herkömmlichen Boxplots besteht darin, dass sie auch für Verteilungen mit mehreren Peaks verwendet werden können.
Die Geigenfigur im Plot kann etwas schwer zu verstehen sein, kann aber unterschiedliche statistische Werte darstellen. Die folgende Abbildung soll dies erläutern.
Abgesehen von DataFrames kann die Funktion violinplot()
mit einem einzelnen Serienobjekt, einem numpy-Array oder einem Listenvektor arbeiten.
Im folgenden Beispiel zeichnen wir die Violin-Plot-Verteilung einer einzelnen Variablen.
import random
import numpy as np
n = random.sample(range(0, 50), 30)
arr = np.array(n)
sns.violinplot(n)
Beachten Sie, dass die Stichprobengröße einen großen Einfluss auf die endgültige Zahl im Violinplot hat. Die Darstellung kann bei einer kleinen Stichprobengröße irreführend sein. Wenn dies immer noch ein wenig verwirrend ist, kann man zum besseren Verständnis ein einfaches Streudiagramm über dem Geigendiagramm zeichnen.
Beispielsweise,
import random
import numpy as np
n = random.sample(range(0, 50), 30)
arr = np.array(n)
sns.violinplot(n)
sns.stripplot(n, color="red")
Die Funktion striplot()
zeichnet hier ein Streudiagramm über dem Geigendiagramm. Auf ähnliche Weise können Sie auch einen Boxplot über dem Violinplot zeichnen, um die Ähnlichkeit und die Unterschiede zwischen beiden zu verstehen.
Die Hauptanwendung von violinplot()
liegt bei Datensätzen, die Verteilungen von Daten mit mehreren Kategorien zeigen. Im folgenden Code werden wir dies implementieren.
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.DataFrame(
{
"Quantity": [5, 6, 7, 8, 5, 6, 7, 8, 5, 6, 7, 8, 5, 6, 7, 8],
"Price": [9, 10, 15, 16, 13, 14, 15, 18, 11, 12, 14, 15, 16, 17, 18, 19],
"Day": [1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2],
"Product": [
"A",
"A",
"A",
"A",
"B",
"B",
"B",
"B",
"A",
"A",
"A",
"A",
"B",
"B",
"B",
"B",
],
}
)
sns.violinplot(data=df, y="Price", x="Quantity", hue="Product")
Beachten Sie, wie wir die Preisverteilungen von zwei verschiedenen Produkten bei unterschiedlichen Mengen an zwei Tagen effizient darstellen konnten. Beachten Sie die Verwendung des Parameters hue
, um zwei Produkte mit unterschiedlichen Farben zu zeichnen.
Viele andere Argumente können verwendet werden, um die endgültige Figur zu optimieren und zu modifizieren. Mit dem Parameter split
können wir die Kategorien einfach vergleichen. Ihre Bestellung kann mit dem Parameter order
verwaltet werden. Jede Beobachtung kann mit dem Parameter inner
innerhalb des Plots angezeigt werden.
Im folgenden Code versuchen wir, einige dieser Argumente zu verwenden.
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.DataFrame(
{
"Quantity": [5, 6, 7, 8, 5, 6, 7, 8, 5, 6, 7, 8, 5, 6, 7, 8],
"Price": [9, 10, 15, 16, 13, 14, 15, 18, 11, 12, 14, 15, 16, 17, 18, 19],
"Day": [1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2],
"Product": [
"A",
"A",
"A",
"A",
"B",
"B",
"B",
"B",
"A",
"A",
"A",
"A",
"B",
"B",
"B",
"B",
],
}
)
sns.violinplot(
data=df, y="Price", x="Quantity", hue="Product", inner="stick", split=True
)
Die Funktion violinplot()
gibt ein Matplotlib-Objekt vom Typ Achsen zurück, um alle diese Matplotlib-Funktionen zum Anpassen der endgültigen Figur zu verwenden. Wenn wir ein Objekt vom Typ FacetGrid
zurückgeben möchten, können wir die Funktion catplot()
verwenden und den Parameter kind
als violin
angeben.
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn