64 votes

Dessiner un cercle avec ggplot2

Peut-être est-ce une question idiote, mais je n'ai pas pu trouver la réponse dans le manuel de ggplot2 ni avec "tante" google...

Comment tracer un cercle avec ggplot2 comme couche supplémentaire si j'ai un point central et un diamètre ? Merci pour votre aide.

78voto

joran Points 68079

Une option plus récente et plus efficace exploite un paquet d'extension appelé ggforce qui définit explicitement geom_circle .

Mais pour la postérité, voici une fonction cercle simple :

circleFun <- function(center = c(0,0),diameter = 1, npoints = 100){
    r = diameter / 2
    tt <- seq(0,2*pi,length.out = npoints)
    xx <- center[1] + r * cos(tt)
    yy <- center[2] + r * sin(tt)
    return(data.frame(x = xx, y = yy))
}

Et une démonstration de son utilisation :

dat <- circleFun(c(1,-1),2.3,npoints = 100)
#geom_path will do open circles, geom_polygon will do filled circles
ggplot(dat,aes(x,y)) + geom_path()

enter image description here

20voto

Luis Points 21

Si le but est seulement d'annoter un cercle, vous pouvez simplement utiliser annotate avec la géométrie "path". Il n'est pas nécessaire de créer un cadre de données ou une fonction :

#g is your plot
#r, xc, yc are the radius and center coordinates

g<-g+annotate("path",
   x=xc+r*cos(seq(0,2*pi,length.out=100)),
   y=yc+r*sin(seq(0,2*pi,length.out=100)))

15voto

Shreyas Karnik Points 849

Salut le code suivant de ggplot2 Google peut être utile :

dat = data.frame(x=runif(1), y=runif(1))
ggplot() + scale_x_continuous(limits = c(0,1)) +
scale_y_continuous(limits = c(0,1))+
geom_point(aes(x=x, y=y), data=dat, size=50, shape=1, color="gold4")

Qui produit : enter image description here

J'espère que cela vous permettra de commencer à créer des exemples personnalisés en fonction de vos besoins.

14voto

baptiste Points 19677

Con ggplot2 >= 0.9 vous pouvez également faire

library(grid)
qplot(1:10, 1:10, geom="blank") +
  annotation_custom(grob=circleGrob(r=unit(1,"npc")), xmin=2, xmax=4, ymin=4, ymax=6)

6voto

Trevor Points 249

Pour la postérité, voici une solution de cercle plus flexible utilisant annotate et geom_ribbon qui prend en charge le remplissage, la couleur, l'alpha et la taille.

gg_circle <- function(r, xc, yc, color="black", fill=NA, ...) {
    x <- xc + r*cos(seq(0, pi, length.out=100))
    ymax <- yc + r*sin(seq(0, pi, length.out=100))
    ymin <- yc + r*sin(seq(0, -pi, length.out=100))
    annotate("ribbon", x=x, ymin=ymin, ymax=ymax, color=color, fill=fill, ...)
}
square <- ggplot(data.frame(x=0:1, y=0:1), aes(x=x, y=y))
square + gg_circle(r=0.25, xc=0.5, yc=0.5)
square + gg_circle(r=0.25, xc=0.5, yc=0.5, color="blue", fill="red", alpha=0.2)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X