Jak dodać zgrabny wielokąt wokół grupy punktów na wykresie rozrzutu? Korzystam z ggplot2, ale jestem rozczarowany wynikami geom_polygon
.
Zestaw danych jest tam , jako plik tekstowy rozdzielany tabulatorami. Poniższy wykres pokazuje dwie miary postaw wobec zdrowia i bezrobocia w wielu krajach:
Chciałbym przejść z geom_density2d
mniej fantazyjnych, ale bardziej empirycznych geom_polygon
. Wynik nieposortowanych danych jest nieprzydatny:
Jak narysować „czyste” wielokąty, które zachowują się jak ścieżki konturu wokół wartości min-maks. Yx? Próbowałem posortować dane bezskutecznie.
Kod:
print(fig2 <- ggplot(d, aes(man, eff, colour=issue, fill=issue)) +
geom_point() + geom_density2d(alpha=.5) + labs(x = "Efficiency", y = "Mandate"))
d
Obiekt uzyskuje z tego pliku CSV .
Rozwiązanie:
Podziękowania dla Wayne'a , Andy'ego W i innych za ich wskazówki! Dane, kod i wykresy zostały opublikowane w GitHub . Wynik wygląda następująco:
źródło
?chull
zggplot2
. Nie jestem pewien, czy dobrze go koduję i mam nadzieję, że ktoś już to zrobił.alphahull
działa podobnie do znalezienia wypukłego kadłuba, ale pozwala dostosować go do wewnątrz / na zewnątrz, aby spróbować zrobić coś takiego jak przedziały ufności.Odpowiedzi:
Z pewnym googlowaniem natknąłem się na stronę Gota Morota, która ma przykład takiego działania już na swojej stronie . Poniżej znajduje się przykład rozszerzony na twoje dane.
źródło
NA
zabijchull
funkcję. Spodziewałbym się, że to po prostu zignoruje, ale to się nie udaje i nie znalazłem sposobu, abyna.omit()
to zrobić. Jestem pewien, że to możliwe, po prostu nie mam umiejętności hakerskich, aby wyjść poza poprzednie rozwiązanie.Jeśli rozumiem problem, szukasz wypukłej kadłubie
health
iunemployment
. Prawdopodobnie istnieje kilka pakietów, aby to zrobić w R, z których jeden to pakietgeometry
. Wyobrażam sobie, że punkty są sortowane w kolejności wokół obwodu, ale trzeba to sprawdzić.EDYCJA: Oto przykład, który nie używa
ggplot
, ale mam nadzieję, że będzie przydatny. Przykład wchull
dokumentacji wydaje się błędny, co może cię wyrzucać:EDYCJA 2: OK, oto coś przy użyciu ggplot2. Zmieniamy
X
się wdata.frame
zmiennex
iy
. Następnie:Zauważ, że
geom_point
używa danych (X
) i aes z ggplot, podczas gdy nadpisuję je wgeom_polygon
.Aby uzyskać go w pełni, musisz umieścić xiy dla kadłuba dla obu problemów
bar
, używając trzeciej kolumny,issue
aby je rozróżnić.źródło
chull
do wygenerowania wypukłego kadłuba, ale nie udało mi się użyć wynikówggplot2
.ggplot2
.na.omit
aby pozbyć się NA, które przestająchull
działać. Dzięki jeszcze raz.Od tego popołudnia zawarłem tę
chull
funkcję w pakiecie R jakogeom_convexhull
funkcję.Po załadowaniu pakiet może być używany jako dowolny inny geom, w twoim przypadku powinno to być coś takiego:
Pakiet jest dostępny na github: https://github.com/cmartin/ggConvexHull
źródło
chull
czynnik grupujący, dopóki go nie znalazłem.