Wie vermeide ich das Überlappen von Beschriftungen in einem R-Plot? [geschlossen]

44

Ich versuche, ein ziemlich einfaches Streudiagramm in R zu beschriften. Dies ist, was ich benutze:

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

Das Ergebnis ist mittelmäßig, wie Sie sehen können (zum Vergrößern klicken):

Bildbeschreibung hier eingeben

Ich habe versucht, dies mit der textxyFunktion zu kompensieren , aber es ist nicht besser . Das Bild selbst zu vergrößern, funktioniert bei dichten Clustern nicht.

Gibt es eine Funktion oder eine einfache Möglichkeit, dies zu kompensieren und R-Plot-Beschriftungen zuzulassen, die sich nicht überlappen ?


Hier ist eine kleine Teilmenge der Daten, die ich habe:

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
quelle
1
Ich habe eine ähnliche Frage hier gepostet , sieh dir die Antworten dort an.
Neugierig
3
Ich habe eine Lösung gefunden ! Das identify()läßt Sie manuell entscheiden , wo das Etikett zu platzieren! Es ist nicht ideal, aber von den vorgeschlagenen Lösungen funktioniert dies am besten für mich.
Neugierig

Antworten:

29

Schauen Sie sich das neue Paket ggrepel an . ggrepel stellt Geoms für ggplot2 bereit, um überlappende Textbeschriftungen abzuwehren. Es funktioniert sowohl für geom_text als auch für geom_label.

Bildbeschreibung hier eingeben

Die Abbildung stammt aus diesem Blogbeitrag .

Sukhdeep Singh
quelle
19

Das directlabelsPaket macht das. Von seiner Webseite :

Dieses Paket ist ein Versuch, die direkte Beschriftung in der täglichen statistischen Praxis zu verwirklichen, indem eine Reihe nützlicher Funktionen zur Verfügung gestellt werden, mit denen die direkte Beschriftung von allgemeinen Plots mit hochrangigen Plotsystemen wie Gitter und ggplot2 einfach möglich ist.

Es ist jedoch möglicherweise nicht immer möglich, dichte Parzellen zu erstellen.

Hier ist ein kurzes Beispiel:

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"))

Ich habe es geschafft, die Punktfärbung mit col="black", aber die nicht Etiketten loszuwerden .

Laurent
quelle
1
Ich habe Probleme damit, es zum Laufen zu bringen. Könnten Sie vielleicht ein einfaches Arbeitsbeispiel liefern?
Slhck
1
In Ihrem Fall sollte so etwas direct.label(xyplot(SI~TI,data=yourDataFrame,group=Name))ein ähnliches Ergebnis erzielen.
Laurent
Perfekt. Hier ist, was ich mit Ihrem letzten einfachen Beispiel endete . Die Farbetiketten und Punkte sind eigentlich sehr schön, da man weiß, wo die Etiketten hingehören.
Slhck
1
Ich musste es benutzen library(lattice), um xyplotzur Arbeit zu kommen.
David J. Harris
14

Ich schlage vor, Sie werfen einen Blick auf das wordcloudPaket. Ich weiß, dass dieses Paket sich nicht genau auf die Punkte konzentriert, sondern auf die Etiketten selbst, und auch der Stil scheint eher festgelegt zu sein. Trotzdem waren die Ergebnisse, die ich damit erzielt habe, erstaunlich. Beachten Sie auch, dass die betreffende Paketversion zu dem Zeitpunkt veröffentlicht wurde, zu dem Sie die Frage gestellt haben. Sie ist also noch sehr neu.

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

Textplot () Ausgabe

Maj
quelle
9

Bei einigen der Diagramme, mit denen ich gearbeitet habe, stieß ich auf ein ähnliches Problem und schrieb ein Basispaket, das die Kraftfeldsimulation zum Anpassen der Objektpositionen verwendet. Der Vorteil gegenüber einigen der oben genannten Lösungen ist die dynamische Anpassung der relativen Objektnähe in 2D. Obwohl viele Verbesserungen möglich sind, einschließlich der Heuristik und der Integration in ggplot usw., scheint es, dass die Aufgabe erfüllt wird. Das Folgende veranschaulicht die Funktionalität:

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

Im Moment gibt es keine Heuristik für eine Vielzahl von Bereichen und Punkteverteilungen, da die Lösung meinen Anforderungen entsprach und ich wollte, dass die Leute schnell etwas Hilfreiches herausbekommen, aber ich werde diese mittelfristig hinzufügen. Zu diesem Zeitpunkt empfehle ich, die Diagramme auf 100x100 und zurück zu skalieren und die Standardparameter für Anziehung und Abstoßung nach Bedarf leicht anzupassen.

gregk
quelle
8

Für den Fall, dass die von R erstellten Beschriftungen einfach nicht ordnungsgemäß funktionieren, können Sie die Grafiken jederzeit in einem Vektorformat (z. B. PDF) speichern und in ein Bearbeitungsprogramm wie InkScape oder Adobe Illustrator ziehen.

Fomite
quelle
8

Ein paar zusätzliche Tools zum Ansehen in R:

Dies wird nicht alles für Sie tun, aber einer von ihnen kann Teil einer Lösung sein.

Greg Snow
quelle