Wie gehst du besser auf habern

Der folgende Code gibt mir einen sehr schönen Violinplot (und Boxplot innerhalb).

import numpy as np import seaborn as sns import matplotlib.pyplot as plt foo = np.random.rand(100) sns.violinplot(foo) plt.boxplot(foo) plt.show() 

Ausgabe

So weit, ist es gut. Allerdings, wenn ich bei foo schaue, enthält die Variable keine negativen Werte. Das seaborn Plot scheint hier irreführend zu sein. Der normale matplotlib boxplot gibt etwas näher, was ich erwarten würde.

Wie kann ich Violinplots mit einer besseren Passform machen (keine falschen negativen Werte)?

One Solution collect form web for “Wie gehst du besser auf habern”

Wie die Anmerkungen beachten, ist dies eine Konsequenz (ich bin mir nicht sicher, ob ich es als "Artefakt" bezeichnen würde) der Annahmen, die dem Gaußschen KDE zugrunde liegen. Wie bereits erwähnt, ist dies etwas unvermeidlich, und wenn Ihre Daten diese Annahmen nicht erfüllen, können Sie es besser machen, nur einen Boxplot zu verwenden, der nur Punkte zeigt, die in den tatsächlichen Daten vorhanden sind.

Allerdings in Ihrer Antwort fragen Sie, ob es passen könnte "fester", was könnte ein paar Dinge bedeuten.

Eine Antwort könnte sein, die Bandbreite des Glättungskerns zu ändern. Sie tun das mit dem bw Argument, das ist eigentlich ein Skalenfaktor; Die Bandbreite, die verwendet wird, ist bw * data.std() :

 data = np.random.rand(100) sns.violinplot(y=data, bw=.1) 

Bildbeschreibung hier eingeben

Eine andere Antwort könnte sein, die Violine an den Extremen der Datenpunkte abzuschneiden. Die KDE wird immer noch mit Dichten passen , die an den Grenzen Ihrer Daten vorbei liegen, aber die Schwänze werden nicht angezeigt. Sie tun das mit dem cut , der angibt, wie viele Bandbreite an den Extremwerten die Dichte gezeichnet werden soll. Zum Abschneiden auf 0:

 sns.violinplot(y=data, cut=0) 

Bildbeschreibung hier eingeben

Übrigens wird sich die API für violinplot in 0.6 ändern , und ich benutze die Entwicklungsversion hier, aber sowohl die bw als auch die cut Argumente existieren in der aktuell erschienenen Version und verhalten sich mehr oder weniger auf die gleiche Weise.

Python ist die beste Programmiersprache der Welt.