Comment ajouter un polygone net autour d'un groupe de points sur un diagramme de dispersion? J'utilise ggplot2 mais je suis déçu des résultats de geom_polygon
.
Le jeu de données est là - bas , sous forme de fichier texte délimité par des tabulations. Le graphique ci-dessous montre deux mesures d'attitude à l'égard de la santé et du chômage dans de nombreux pays:
Je voudrais passer du geom_density2d
moins fantaisiste mais empiriquement plus correct geom_polygon
. Le résultat sur des données non triées est inutile:
Comment dessiner des polygones "nets" se comportant comme des chemins de contour autour des valeurs min-max yx? J'ai essayé de trier les données en vain.
Code:
print(fig2 <- ggplot(d, aes(man, eff, colour=issue, fill=issue)) +
geom_point() + geom_density2d(alpha=.5) + labs(x = "Efficiency", y = "Mandate"))
L' d
objet est obtenu avec ce fichier CSV .
Solution:
Merci à Wayne , Andy W et aux autres pour leurs conseils! Les données, codes et graphiques ont été publiés sur GitHub . Le résultat ressemble à ceci:
?chull
avecggplot2
jusqu'à présent. Je ne suis pas sûr de bien le coder et j'espère que quelqu'un l'a déjà fait.alphahull
fonctionne de manière similaire à la recherche de la coque convexe, mais vous permet de l’ajuster vers l’intérieur / vers l’extérieur pour essayer de faire quelque chose comme des intervalles de confiance.Réponses:
Avec Google, je suis tombé sur le site Web de Gota Morota qui en a déjà un exemple sur son site Web . Vous trouverez ci-dessous cet exemple étendu à vos données.
la source
NA
tuer lachull
fonction. Je m'attendrais à ce qu'il l'ignore simplement, mais cela a échoué et je n'ai pas trouvé le moyenna.omit()
de le faire fonctionner. Je suis sûr que c'est possible, je n'ai tout simplement pas les compétences en hackery pour aller au-delà de la solution précédente.Si je comprends votre problème, vous recherchez la coque convexe de
health
et deunemployment
. Il y a probablement plusieurs paquets pour le faire dans R, dont un paquetgeometry
. J'imagine que les points sont classés dans l'ordre autour du périmètre, mais vous devez vérifier cela.EDIT: Voici un exemple, qui n’utilise pas
ggplot
, mais j’espère que c’est utile. L'exemple dans lachull
documentation semble être faux, ce qui pourrait vous jeter au dépourvu:EDIT 2: OK, voici quelque chose utilisant ggplot2. Nous nous transformons
X
en unedata.frame
avec des variablesx
ety
. Ensuite:Notez que le
geom_point
utilise les données (X
) et aes du ggplot, alors que je le remplace dans legeom_polygon
.Pour bien le comprendre, vous devez insérer les lettres x et y de la coque pour les deux problèmes
bar
, en utilisant une troisième colonneissue
pour les différencier.la source
chull
pour générer la coque convexe mais je n'ai pas réussi à utiliser les résultatsggplot2
.ggplot2
.na.omit
pour me débarrasser de NA qui empêchechull
de travailler. Merci encore.Depuis cet après-midi, j'ai
chull
intégré la fonction dans un package R en tant quegeom_convexhull
fonction.Une fois que le paquet est chargé, il peut être utilisé comme n’importe quel autre géom. Dans votre cas, cela devrait ressembler à:
Le paquet est disponible sur github: https://github.com/cmartin/ggConvexHull
la source
chull
un facteur de regroupement jusqu'à ce que je trouve cela.