Wie füge ich ein ordentliches Polygon um eine Gruppe von Punkten in einem Streudiagramm hinzu? Ich verwende ggplot2, bin aber von den Ergebnissen von enttäuscht geom_polygon
.
Der Datensatz befindet sich dort als tabulatorgetrennte Textdatei. Die folgende Grafik zeigt zwei Kennzahlen zur Einstellung gegenüber Gesundheit und Arbeitslosigkeit in einer Reihe von Ländern:
Ich würde gerne von geom_density2d
weniger schick, aber empirisch korrekt wechseln geom_polygon
. Das Ergebnis für unsortierte Daten ist nicht hilfreich:
Wie zeichne ich "ordentliche" Polygone, die sich als Konturpfade um die Min-Max-YX-Werte verhalten? Ich habe versucht, die Daten ohne Erfolg zu sortieren.
Code:
print(fig2 <- ggplot(d, aes(man, eff, colour=issue, fill=issue)) +
geom_point() + geom_density2d(alpha=.5) + labs(x = "Efficiency", y = "Mandate"))
Das d
Objekt wird mit dieser CSV-Datei erhalten .
Lösung:
Vielen Dank an Wayne , Andy W und andere für ihre Hinweise! Die Daten, der Code und die Grafiken wurden auf GitHub gepostet . Das Ergebnis sieht so aus:
quelle
?chull
mitggplot2
bisher. Ich bin mir nicht sicher, ob ich es richtig codiere und hoffe, dass jemand es bereits getan hat.alphahull
funktioniert ähnlich wie das Finden der konvexen Hülle, aber Sie können es nach innen / außen anpassen, um zu versuchen, so etwas wie Konfidenzintervalle zu machen.Antworten:
Mit ein wenig googeln bin ich auf die Website von Gota Morota gestoßen, die ein Beispiel dafür bereits auf ihrer Website hat . Das folgende Beispiel bezieht sich auf Ihre Daten.
quelle
NA
diechull
Funktion töten . Ich würde erwarten, dass es einfach ignoriert wird, aber es schlägt fehl und ich fand keine Möglichkeit, es zum Laufenna.omit()
zu bringen. Ich bin mir sicher, dass es möglich ist. Ich habe einfach nicht die Hackerfähigkeiten, um über die vorherige Lösung hinauszugehen.Wenn ich Ihr Problem verstehe, suchen Sie nach der konvexen Hülle von
health
und vonunemployment
. In R gibt es wahrscheinlich mehrere Pakete, von denen eines package istgeometry
. Ich könnte mir vorstellen, dass die Punkte nach Umfang sortiert sind, aber das müsste man überprüfen.EDIT: Hier ist ein Beispiel, das nicht verwendet wird
ggplot
, aber ich hoffe, es ist nützlich. Das Beispiel in derchull
Dokumentation scheint falsch zu sein, was Sie möglicherweise abschreckt:EDIT 2: OK, hier ist etwas mit ggplot2. Wir verwandeln uns
X
in eindata.frame
mit Variablenx
undy
. Dann:Beachten Sie, dass das
geom_point
die Daten (X
) und aes vom ggplot verwendet, während ich es im überschreibegeom_polygon
.Um es vollständig zu erhalten, müssen Sie das x und das y für den Rumpf für beide Probleme in
bar
eine dritte Spalteissue
einfügen, um sie zu unterscheiden.quelle
chull
den konvexen Rumpf zu erzeugen, aber die Ergebnisse mit nicht verwendetggplot2
.ggplot2
.na.omit
, um NA loszuwerden, die nicht mehrchull
funktionieren. Danke noch einmal.Ab heute Nachmittag habe ich die
chull
Funktion in einem R-Paket alsgeom_convexhull
Funktion verpackt .Sobald das Paket geladen ist, kann es wie jedes andere Geom verwendet werden. In Ihrem Fall sollte es ungefähr so aussehen:
Das Paket ist auf github verfügbar: https://github.com/cmartin/ggConvexHull
quelle
chull
über einen Gruppierungsfaktor hinweg anzuwenden , bis ich dies fand.