Ответ 1
Вам нужно указать asp = 1
require(plotrix)
require(grid)
plot(c(-1, 1), c(-1,1), type = "n", asp=1)
rect( -.5, -.5, .5, .5)
draw.circle( 0, 0, .5 )
Смотрите также: Рисование непересекающихся кругов Это тоже меня!
Я пытаюсь сделать простую иллюстрацию, где кружок нанесен внутри квадрата. Я использовал функцию rect()
из пакета grid
и draw.circle()
из пакета plotrix
, прежде чем я подумал, что это будет просто. Но ясно, что я что-то упускаю.
Мне кажется, что следующий код выглядит следующим образом:
require(plotrix)
require(grid)
plot(c(-1, 1), c(-1,1), type = "n")
rect( -.5, -.5, .5, .5)
draw.circle( 0, 0, .5 )
однако я заканчиваю кругом, примыкающим к квадрату в вертикальном размере следующим образом:
Что, черт возьми, я пропустил?
Если у вас есть более простой способ построения кругов и квадратов, я хотел бы узнать об этом. Но я также хотел бы знать, почему мой метод выше не работает.
Спасибо!
Вам нужно указать asp = 1
require(plotrix)
require(grid)
plot(c(-1, 1), c(-1,1), type = "n", asp=1)
rect( -.5, -.5, .5, .5)
draw.circle( 0, 0, .5 )
Смотрите также: Рисование непересекающихся кругов Это тоже меня!
Вы можете использовать функцию my.symbols в пакете TeachingDemos:
library(TeachingDemos)
my.symbols(1,1,ms.polygon, n=360, add=FALSE)
my.symbols(1,1, cbind( c(-1,-1,1,1,-1), c(-1,1,1,-1,-1) ), add=TRUE)
Вот решение в базе R:
x <- seq(-2, 2, 0.01)
y <- seq(-2, 2, 0.01)
plot(x,y, xlim = c(-2,2), ylim=c(-2,2), type='n', asp = 1)
curve(( 1 * (4 - x^2)^0.5 ), add=TRUE, from=-2 , to =2)
curve(( -1 * (4 - x^2)^0.5 ), add=TRUE, from=-2 , to =2)
rect(-2,-2,2,2)
# to fill circle and square
plot(x,y, xlim = c(-2,2), ylim=c(-2,2), type='n', asp = 1)
x2 <- c(seq(-2, 2, 0.01), seq(-2, 2, 0.01))
y2 <- c(( 1 * (4 - x2[1:401]^2)^0.5 ), ( -1 * (4 - x2[402:802]^2)^0.5 ))
rect(-2,-2,2,2, col = 'red')
polygon(x2,y2, col = 'green', border = NA)
ИЗМЕНИТЬ
Просто для удовольствия, вот функция:
circle.square.function <- function(radius, x.midpoint, y.midpoint,
my.x.lim, my.y.lim) {
x <- seq(x.midpoint-radius, x.midpoint+radius, 0.01)
y <- seq(y.midpoint-radius, y.midpoint+radius, 0.01)
plot(x,y, xlim = my.x.lim, ylim = my.y.lim, type='n', asp = 1)
curve(( 1 * (radius^2 - (x - x.midpoint)^2)^0.5 + y.midpoint), add=TRUE,
from = (x.midpoint-radius) , to = (x.midpoint+radius))
curve(( -1 * (radius^2 - (x - x.midpoint)^2)^0.5 + y.midpoint), add=TRUE,
from = (x.midpoint-radius) , to = (x.midpoint+radius))
rect((x.midpoint-radius),(y.midpoint-radius),
(x.midpoint+radius),(y.midpoint+radius))
}
radius <- 10 # radius of circle
x.midpoint <- 150 # center of circle on x-axis
y.midpoint <- 50 # center of circle on y-axis
my.x.lim <- c(-100,200) # x-axis to plot
my.y.lim <- c( 0,200) # y-axis to plot
circle.square.function(radius, x.midpoint, y.midpoint, my.x.lim, my.y.lim)