使用整数值和ggplot2绘制阿基米德螺线

时间:2016-12-30 05:47:58

标签: r math plot ggplot2 spiral

你如何在R中画出一个漩涡?我试图绘制1:100的数字列表 并且每7个数字为它分配一个因子'1',其他所有数字仅为'0'。我也有一个TRUE或FALSE的向量。如何绘制这些数字的漩涡并突出显示每七个数字?试着看看我是否可以拧紧或松开漩涡(theta)以对齐第7个数字。我用以下代码创建数据。我使用了两个不同的函数来查看哪个矢量效果最好。逻辑向量或“1”或“0”的向量。

returnint  <- function( x ) { 
if ( x == TRUE) {
        return (1)
    } else {
        return (0)
   }  
}

isseven <- function( x ) {
if  (x %% 7)  {
       return (0) # FALSE
    } else {
       return (1) # TRUE
   }
}

fo = seq(1, 100)
fo.sev = NULL # factors
fo.int = NULL   # as int 0 = FALSE , 1 = TRUE

for (i in 1:length(fo)) {
   fo.sev[i] = as.logical(isseven(i)) 
   fo.int[i] = returnint(fo.sev[i])
}


df <- data.frame(fo,fo.int,as.factor(fo.sev))
names(df) <- c("x","intx","seven")
df

2 个答案:

答案 0 :(得分:3)

https://en.wikipedia.org/wiki/Archimedean_spiral开始,阿基米德螺旋的极坐标为r=a+b*theta,实数为a和b。以下代码可用于绘制一个:

# for some fixed real a, b
a <- 2
b <- 3
theta <- seq(0,10*pi,0.01)
r <- a + b*theta
df <- data.frame(x=r*cos(theta), y=r*sin(theta)) # Cartesian coords
library(ggplot2)
ggplot(df, aes(x,y)) + geom_point(col='red')

enter image description here

答案 1 :(得分:3)

(我承认在标题中回答了请求,但没有理解你的其他文本请求的内容,尽管我后来猜测了。)只需使用一对参数方程设置数据:

x = t*cos(t); y = t*sin(t)

你需要很好地实例化t ......如果你的目的是平滑的曲线:

 t <- seq(0, 10, by=0.01)
 x = t*cos(t); y = t*sin(t)
 ggplot(data.frame(x,y), aes(x=x,y=y))+geom_path()

enter image description here

这是对绘制整数的请求的猜测;

png()
  print( ggplot( df, aes(x=x*cos(x), y=x*sin(x)))  + 
            geom_label(data=df, aes(label=x, color=intx, size=intx + 1) ) + 
            coord_equal() )
  dev.off()

enter image description here

标签框看起来确实具有最小尺寸,因为即使它们的size为零,它们也显得可见。我确实用label.padding = unit(0.05, "lines")

获得了较小的“标签框”