Może to głupie pytanie, ale nie mogę znaleźć odpowiedzi w Handbook of ggplot2 ani z „ciotką” google ...Narysuj okrąg o ggplot2
Jak mogę wykreślić okrąg o ggplot2 jako dodatkowa warstwa, jeśli mam środkowy punkt i średnicę? Dzięki za pomoc.
Może to głupie pytanie, ale nie mogę znaleźć odpowiedzi w Handbook of ggplot2 ani z „ciotką” google ...Narysuj okrąg o ggplot2
Jak mogę wykreślić okrąg o ggplot2 jako dodatkowa warstwa, jeśli mam środkowy punkt i średnicę? Dzięki za pomoc.
Nowsza, lepsza opcja wykorzystuje pakiet rozszerzeń o nazwie ggforce, który definiuje explicity geom_circle
.
ale dla potomności, oto prosta funkcja koło:
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))
}
A demonstracja nim znajduje zastosowanie:
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()
Dzięki Joran, właśnie tego szukam ... Zastanawiam się, że musisz użyć tej funkcji, aby uświadomić to sobie w ggplot. Jeśli dobrze pamiętam, fabuła ma do tego funkcję kompilacji. Ale te działki wyglądają po prostu ładniej ;-) – Dominik
@Dominik - Rzeczywiście istnieje "siatka.circle', ale aby ta praca wymagała pewnej wiedzy o systemie 'grid'. – joran
Hi następujący kod z ggplot2 Google grupy mogą być użyteczne:
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")
która produkuje:
Mam nadzieję, że zostanie uruchomiony w hackingu się przykłady niestandardowych dla Twojego celu.
Mogę się mylić, ale nie sądzę, że ta metoda odnosi się do pytania OP, w jaki sposób narysować okrąg * ze względu na środek i średnicę *. Będzie bardzo trudno uzyskać odpowiednią średnicę przy użyciu estetyki rozmiaru. – joran
Zgadzam się, to był tylko wskaźnik w dobrym kierunku, a nie kompletne rozwiązanie. –
Dzięki za podpowiedź Neo_me, ale sposób w jaki Joran pisał lepiej pasuje do moich potrzeb. – Dominik
także spróbować tego,
ggplot() + geom_rect(aes(xmin=-1,ymin=-1,xmax=1,ymax=1), fill=NA) + coord_polar()
W tym punkcie okrąg w niektórych układach współrzędnych często nie jest kołem w innych, chyba że używasz geom_point. Możesz chcieć zapewnić współczynnik kształtu 1 o współrzędnych kartezjańskich.
To, co chcę wydrukować, to horyzont ważności na działce rozproszonej. Dla tego rozwiązania jorans wydaje się być najlepszym sposobem. Ale bardzo dziękuję za twoją podpowiedź. – Dominik
z ggplot2 >= 0.9
można też zrobić
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)
Zmienia rozmiar z rozmiarem płótna. – SigmaX
Jeśli celem jest tylko do opisywania okrąg, można po prostu użyć adnotacji z geometrii „ścieżka”. Nie ma potrzeby, aby utworzyć ramkę danych lub funkcji:
#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)))
Dla dobra potomności tu jest bardziej elastyczne rozwiązanie koło za pomocą adnotacji i geom_ribbon który obsługuje wypełnienia, kolor, alfa i rozmiar.
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)
Tylko dla kompletności: Pakiet ggforce
przez thomasp85 zapewnić geom_circle
ciocia Google był bardziej wrażliwy na mnie. [To] (http://groups.google.com/group/ggplot2/browse_thread/thread/7f4238b5658e85bb) może być pomocne. – joran