2015-07-21 3 views
7

Я пытаюсь построить половину кругов, используя R. Моя конечная цель - нарисовать круг, разделенный посередине цветом. Единственный способ, который я нашел, - нарисовать два полукруга с разными цветами.
Так я создал мои собственные функции:Построение половины кругов в R

upper.half.circle <- function(x,y,r,nsteps=100,...){ 
    rs <- seq(0,pi,len=nsteps) 
    xc <- x+r*cos(rs) 
    yc <- y+r*sin(rs) 
    polygon(xc,yc,...) 
} 

lower.half.circle <- function(x,y,r,nsteps=100,...){ 
    rs <- seq(0,pi,len=nsteps) 
    xc <- x-r*cos(rs) 
    yc <- y-r*sin(rs) 
    polygon(xc,yc,...) 
} 

Однако, по какой-то причине мои полукруги в конечном итоге больше как пол-эллипсов. Например, попробуйте запустить:

plot(1, type="n",axes=F,xlab="", ylab="",xlim=c(0,200),ylim=c(0,200)) 
upper.half.circle(15,170,10,nsteps=1000,col='red') 

Кто-нибудь знает, почему у меня эта проблема, или, наоборот, знает лучшего способа сделать то, что я хочу?
Спасибо!

+0

Какой тип сюжета мы пытаемся сделать? – zx8754

ответ

5

Проблема заключается в том, что соотношение сторон по умолчанию не равно 1: 1.

Чтобы исправить это, установите asp=1 в plot:

fixed circle

this Вдохновленный Q & A. Вы могли бы пронюхали это был случай, поворачивая на осях и х/у метки.

+0

Спасибо! который решает эту проблему. – soungalo

2

При использовании пакета сетки будет также возможностью для Вас, есть гораздо более простое решение:

library(grid) 
vp <- viewport(width=0.5, height=0.5, clip = "on") 
grid.circle(0.5,0,r=0.5, gp = gpar(fill = 'red'), vp = vp) 

Это создает окно просмотра с вырезкой, то есть соответствующее позиционирование кружком создает половину круг.

0

Если вы хотите добавить половину окружности к существующему сюжету (и, следовательно, не может контролировать соотношение сторон напрямую), то один из вариантов для этого конкретного случая, чтобы использовать функцию floating.pie из пакета plotrix.

Более общий инструмент для создания пользовательских символов и их добавления к графикам (с символами, имеющими различное соотношение сторон от общего графика) заключается в использовании функции из пакета TeachingDemos.

Смежные вопросы