在R中的正方形内绘制一个圆圈

时间:2011-03-23 21:22:11

标签: r plot

我正在尝试制作一个简单的插图,其中圆形绘制在正方形内。我之前使用过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 )

然而,我最终将圆圈从垂直方向的方块中拉出来,如下所示:

enter image description here

我错过了什么?

如果你有更简单的方法来绘制圆形和正方形,我很想知道它。但我也想知道为什么我的方法不起作用。

谢谢!

4 个答案:

答案 0 :(得分:22)

您需要指定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 )

另见:Drawing non-intersecting circles 这个也让我了!

答案 1 :(得分:6)

您可以在TeachingDemos包中使用my.symbols函数:

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)

答案 2 :(得分:5)

以下是基础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)

enter image description here

修改

只是为了好玩,这是一个功能:

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)

答案 3 :(得分:0)

在底数R中的在R的正方形内绘制圆的另一种解决方案

plot(c(-1, 1), c(-1,1), type = "n", asp=1)
symbols(x=0, y=0, squares=1, inches=F, add=T)
symbols(x=0, y=0, circles=.5, inches=F, add=T)

这是使用plottrix在as!= 1时的解决方案。当asp!= 1时,圆看起来像椭圆。

symbols(x=0, y=0, rectangles=matrix(c(1,1),ncol=2), inches=F)
library("plotrix")
draw.ellipse(x=0, y=0, a=.5, b=.5)

或者Mark Miller's base R solution也适用于asp!= 1。