Ich habe eine Datenbank mit Sprachen, deren Längen- und Breitengraden und einem Merkmalswert (entweder Kategorie 1, Kategorie 2 oder beides - im Plot sind diese rot, blau und grün markiert). Es kann bis zu drei Punkte pro Sprache geben und natürlich können zwei Sprachpunkte sehr nahe beieinander liegen.
name longitude latitude sp_sum
1 Modern Armenian 45 40 both
2 Modern Armenian 45 40 both
3 Modern Armenian 45 40 spatial
4 Dieri 138 -28.1667 both
5 Dieri 138 -28.1667 both
6 Finnish 25.5577 64.7628 non-spatial
7 Crimean Tatar 28.1418 43.8398 spatial
8 Ese Ejja -67.515 -11.7268 non-spatial
9 Makhuwa 38.8052 -14.8509 non-spatial
...
Ich verwende das R-Paket ggplot2 (das ist das, mit dem ich am vertrautesten bin, daher würde ich es gerne weiter verwenden - aber andere Lösungen sind auch willkommen). Hier ist eine Ernte aus einem früheren Versuch (Code: siehe unten 1 ):
Für jeden Punkt möchte ich, dass die (raue) Position - sowie der Wert - noch sichtbar sind. (Wenn es für eine Sprache mehrere Punkte gibt, können diese kombiniert werden.)
Gibt es auch einen Weg ...
- ... um Punkte nur so weit zur Seite zu bewegen, dass es zu keinem Überzeichnen kommt (weniger zufällig als zum Beispiel mit geom_jitter - im Bienenwarm- Paket gibt es zum Beispiel viele solcher Ausweichmanöver )?
- ... und / oder um eine Art "Linie" zu haben, die auf die ursprüngliche Position eines Punktes zeigt, wenn dieser verschoben werden musste?
- ... oder um nahegelegene Punkte so zu kombinieren, dass sie immer noch klar sind (es gibt wahrscheinlich eine Arbeitstechnik, die das Binning verwendet, dh stat_bin * oder etwas mit einem ähnlichen Effekt)?
... oder um ein "interaktives Diagramm" zu erstellen, wie es auf Websites zu sehen ist, das noch in ein PDF eingefügt werden kann (ich denke auch an die Fähigkeiten von Paketen wie Animation und Glänzen hier)? Auf wals.info sieht es zum Beispiel so aus :
Aus einem früheren Beitrag hier weiß ich, dass mit dem DirectLabels- Paket Beschriftungen verschoben werden können, aber ich habe keine Möglichkeit gefunden, die Punkte ebenfalls zu verschieben.
Fühlen Sie sich frei, um Klarstellung zu bitten!
Hinweis: Ich bin mir bewusst, dass es eine Reihe von Fragen zum Überzeichnen gab, aber diejenigen, die ich untersucht habe, schienen einen anderen (dh statistischen) Zweck zu haben (ich behaupte nicht, alles gelesen zu haben , also habe ich ' würde mich natürlich auch über einen Link freuen). Ich werde versuchen, die Posts aufzulisten, die ich kenne und die möglicherweise relevant sind (- nach dem, was ich gelesen habe, beantwortet keine dieser Posts meine Frage genau).
- stats.SE: Wie vermeide ich das Überlappen von Beschriftungen in einem R-Plot?
- SO: Dynamische Datenpunktbezeichnung Positionierung in ggmap
1 Die folgenden Codezeilen haben den Zuschnitt von oben erstellt.
library(OpenStreetMap)
library(ggplot2)
data <- read.csv(header = T, sep = ",", dec = ".", quote= "'",
text = "'','name','longitude','latitude','sp_sum'
'1','Modern Armenian',45,40,'both'
'2','Modern Armenian',45,40,'both'
'3','Modern Armenian',45,40,'spatial'
'4','Dieri',138,-28.1667,'both'
'5','Dieri',138,-28.1667,'both'
'6','Finnish',25.5577,64.7628,'non-spatial'
'7','Crimean Tatar',28.1418,43.8398,'spatial'
'8','Sochiapam Chinantec',-96.6079,17.7985,'non-spatial'
'9','Ese Ejja',-67.515,-11.7268,'non-spatial'
'10','Makhuwa',38.8052,-14.8509,'non-spatial'
'11','Mualang',111.077,0.31083,'non-spatial'
'12','Martuthunira',116.607,-20.9294,'non-spatial'
'13','Evenki',108.626,53.85,'both'
'14','Afrikaans',30,-22,'both'
'15','Male (Ethiopia)',36.9892,5.91975,'both'
'16','Manchu',126.557,47.3122,'both'
'17','Dime',36.3329,6.20951,'non-spatial'
'18','Koorete',37.8679,5.80545,'non-spatial'
'19','Wolaytta',37.7537,6.32668,'both'
'20','Dizin',35.5763,6.1405,'both'")
map <- openproj(openmap(c(85, -179.9), c(-60, 179.9), zoom = 2, type = "nps"))
plot <- autoplot(map) +
geom_point(data = data, aes(x = longitude, y = latitude),
color = "white", alpha = 0.8, size = 8) +
geom_point(data = data, aes(x = longitude, y = latitude, color = sp_sum),
alpha = 0.3, size = 4)
plot
Antworten:
Bisher habe ich nur eine recht anständige Problemumgehung gefunden: Das Paket packcircles R wurde möglicherweise für einen anderen Zweck entwickelt, aber es leistet gute Arbeit, indem es die Punkte voneinander wegdrückt (siehe auch den entsprechenden Blog-Beitrag ). Ich verstehe möglicherweise nicht alle Funktionen dieses Pakets, aber zum Glück kann die Beispieldatei von der Website, wie Sie feststellen werden, fast direkt verwendet werden - alles, was geändert werden muss, sind die Variablennamen, der Abstand zwischen Kreisen (oder Punkten) (abhängig von den verwendeten Funktionen) und den "Grenzen" des Graphen (dh 180 °).
(Am Ende kommt es auf die
circleLayout()
Funktion an, die einen Datenrahmen mit Lon-, Lat- und Radiusspalten und zwei 2-numerischen xlim / ylim-Vektoren verwendet - sie gibt den Datenrahmen mit verbesserten Punktpositionen zurück.)quelle
So etwas vielleicht?
quelle