J'ai une base de données contenant les langues, leurs longitudes et latitudes et une valeur de caractéristique (catégorie 1, catégorie 2 ou les deux - dans l'intrigue, elles sont marquées respectivement en rouge, bleu et vert). Il peut y avoir jusqu'à trois points par langue et naturellement deux points de langue peuvent être très proches l'un de l'autre.
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
...
J'utilise le package R ggplot2 (c'est celui que je connais le mieux, donc je serais heureux de continuer à l'utiliser - mais d'autres solutions sont également les bienvenues). Voici un recadrage d'une tentative précédente (code: voir ci-dessous 1 ):
Pour chaque point, j'aimerais que la position (approximative) - ainsi que la valeur - soient toujours visibles. (S'il y a plusieurs points pour une seule langue, ils peuvent être combinés.)
Y a-t-il un moyen non plus ...
- ... pour déplacer les points sur le côté juste assez pour qu'il n'y ait pas de surplacement (moins au hasard que, par exemple, en utilisant geom_jitter - il y a beaucoup de ce genre d' esquive dans le package beeswarm par exemple)?
- ... et / ou d'avoir une sorte de "ligne" pointant vers la position d'origine d'un point s'il devait être déplacé?
- ... ou pour combiner des points proches de manière à ce qu'ils soient toujours clairs (il existe probablement une technique de travail qui utilise le binning, c'est-à-dire stat_bin * ou quelque chose avec un effet similaire)?
... ou pour créer une "intrigue interactive" comme celles vues sur des sites Web qui peuvent encore être inclus dans un pdf (je pense aussi aux capacités de packages comme l' animation et brillant ici)? Par exemple, cela ressemble à wals.info :
D'après un article précédent ici, je sais que le package directlabels peut déplacer des étiquettes, mais je n'ai pas trouvé de moyen de le faire déplacer également les points.
N'hésitez pas à demander des éclaircissements!
Note: Je sais qu'il ya eu un certain nombre de questions sur overplotting, mais ceux que j'ai regardé dans tous semblaient avoir un autre ( par exemple statistique) but (je ne prétends pas avoir lu tout ce , donc je je serais également heureux d'accepter un lien). Je vais essayer d'énumérer les messages que je connais et qui pourraient bien être pertinents (- d'après ce que j'ai lu, aucun d'eux ne répond exactement à ma question.)
- stats.SE: Comment éviter les doublons d'étiquettes dans un tracé R?
- SO: étiquette de point de données dynamique Positionnement dans ggmap
1 Les lignes de code suivantes ont créé le recadrage d'en haut.
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
Réponses:
Jusqu'à présent, je n'ai trouvé qu'une solution de contournement assez décente: le package packcircles R a peut-être été conçu dans un autre but, mais il fait un bon travail en éloignant les points les uns des autres (voir également le billet de blog correspondant ). Je ne comprends peut-être pas tout le fonctionnement interne de ce package, mais heureusement, comme vous le trouverez, le fichier d'exemple du site Web peut être utilisé presque directement - tout ce qu'il faut changer sont les noms des variables, la distance entre les cercles (ou points , selon les fonctions que vous utilisez) et les "limites" du graphique (ie 180 °).
(En fin de compte, tout se résume à la
circleLayout()
fonction, qui prend une trame de données avec des colonnes lon, lat et radius (c.-à-d. Distance) et deux vecteurs xlim / ylim à 2 chiffres - elle renvoie la trame de données avec des positions de points améliorées.)la source
Quelque chose comme ça, peut-être?
la source