Jak uniknąć nakładania się etykiet na wykresie R? [Zamknięte]

44

Próbuję oznaczyć dość prosty wykres rozrzutu w R. Oto, czego używam:

plot(SI, TI)
text(SI, TI, Name, pos=4, cex=0.7)

Wynik jest mierny, jak widać (kliknij, aby powiększyć):

wprowadź opis zdjęcia tutaj

Próbowałem to zrekompensować za pomocą textxyfunkcji, ale nie jest lepiej . Powiększanie samego obrazu nie działa w przypadku gęstych klastrów.

Czy jest jakaś funkcja lub prosty sposób na zrekompensowanie tego i pozostawienie etykiet R, które się nie nakładają ?


Oto mały podzbiór danych, które mam:

Name;SI;TI
01_BAD_talking_head;6.944714;4.421208
01_GOOD_talking_head;5.680141;4.864035
01_GOOD_talking_head_subtitles;7.170114;4.664205
slhck
źródło
1
Zadałem podobne pytanie tutaj , spójrz na odpowiedzi tam ..
Ciekawe
3
Znalazłem rozwiązanie ! identify()Chodźmy ręcznie zdecydować, gdzie umieścić etykietę! To nie jest idealne, ale z proponowanych rozwiązań to działa najlepiej dla mnie.
Ciekawy

Odpowiedzi:

29

Sprawdź nowy pakiet ggrepel . ggrepel zapewnia geom dla ggplot2, aby odeprzeć nakładające się etykiety tekstowe. Działa zarówno dla geom_text, jak i geom_label.

wprowadź opis zdjęcia tutaj

Rysunek pochodzi z tego postu na blogu .

Sukhdeep Singh
źródło
19

directlabelsPakiet robi. Ze swojej strony internetowej :

Pakiet ten jest próbą urzeczywistnienia bezpośredniego znakowania w codziennej praktyce statystycznej poprzez udostępnienie zestawu przydatnych funkcji, które sprawiają, że bezpośrednie oznaczanie wspólnych wykresów jest łatwe do wykonania dzięki wysokopoziomowym systemom kreślenia, takim jak sieć i ggplot2.

Jednak nie zawsze jest to możliwe w przypadku gęstych wykresów.

Oto krótki przykład:

set.seed(123)
a <- c(rnorm(10,-3,2),rnorm(10,3,2))
b <- c(rnorm(10,-3,2),rnorm(10,3,2))
dfr <- data.frame(a,b)
dfr$t <- c(paste("A",1:10,sep=""),paste("B",1:10,sep=""))
direct.label(xyplot(b~a,dfr,groups=t, col="black"))

Udało mi się pozbyć punktowego kolorowania col="black", ale nie etykiet.

Laurent
źródło
1
Mam problem z uruchomieniem go. Czy mógłbyś podać prosty działający przykład?
slhck
1
W twoim przypadku coś takiego direct.label(xyplot(SI~TI,data=yourDataFrame,group=Name))powinno uzyskać podobny wynik.
Laurent
Doskonały. Oto, co skończyło się na twoim ostatnim prostym przykładzie. Kolorowe etykiety i punkty są w rzeczywistości bardzo ładne, ponieważ wiesz, gdzie należą etykiety.
slhck,
1
Musiałem użyć, library(lattice)aby dostać się xyplotdo pracy.
David J. Harris
14

Proponuję spojrzeć na wordcloudpaczkę. Wiem, że ten pakiet nie skupia się dokładnie na punktach, ale na samych etykietach, a także styl wydaje się raczej naprawiony. Mimo to wyniki, które uzyskałem, były dość oszałamiające. Zauważ też, że omawiana wersja pakietu została wydana mniej więcej w czasie, w którym zadałeś pytanie, więc wciąż jest bardzo nowa.

http://blog.fellstat.com/?cat=11

Wyjście textplot ()

maj
źródło
9

Z kilkoma wykresami, z którymi pracowałem, napotkałem podobny problem i napisałem podstawowy pakiet, który wykorzystuje symulację pola siłowego do dostosowania lokalizacji obiektów. Przewagą niektórych wyżej wymienionych rozwiązań jest dynamiczna regulacja względnej bliskości obiektu w 2D. Chociaż możliwa jest znaczna poprawa, w tym heurystyka i integracja z ggplot itp., Wydaje się, że zadanie zostało wykonane. Poniżej przedstawiono funkcjonalność:

install.packages("FField", type = "source")
install.packages("ggplot2")
install.packages("gridExtra")
library(FField)
FFieldPtRepDemo()

Na razie nie ma heurystyki dla różnych obszarów i rozkładów punktowych, ponieważ rozwiązanie spełniło moje potrzeby i chciałem szybko znaleźć coś pomocnego, ale dodam je w perspektywie średnioterminowej. W tej chwili zalecam skalowanie wykresów do 100 x 100 i wstecz oraz nieznaczne ulepszenie domyślnych parametrów przyciągania i odpychania, jak jest to uzasadnione.

gregk
źródło
8

W przypadku, gdy po prostu nie możesz sprawić, by etykiety działały poprawnie tak, jak zostały utworzone przez R, pamiętaj, że zawsze możesz zapisać wykresy w formacie wektorowym (np. .Pdf) i przeciągnąć je do programu do edycji, takiego jak InkScape lub Adobe Illustrator.

Fomite
źródło
8

Kilka dodatkowych narzędzi do obejrzenia w R:

To nie zrobi wszystkiego dla ciebie, ale jeden z nich może być częścią rozwiązania.

Greg Snow
źródło