【问题标题】:Plot an Archimedean spiral using integer values with ggplot2使用带有 ggplot2 的整数值绘制阿基米德螺旋线
【发布时间】:2016-12-30 05:47:58
【问题描述】:

你如何在 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

【问题讨论】:

  • 最接近我可以使用极坐标进行绘图的是以下
  • 等式在这里link 抱歉所有这些较小的位,无法编辑原始帖子
  • 使用 ggplot 的两个方程都计算出 view ,但它绘制了所有点,我希望绘制 7,14,21,28,35,42 ... 等。这些将叠加在漩涡上。即使我可以绘制 fo.sev 向量,我也会完成。谢谢!
  • 您应该使用edit 更完整地解释“绘制”这些数字和“漩涡”的含义。大概您希望在 7,14 等处担任 x(或 y)的角色,但没有解释 y(或 x)应该是什么。有几个人尝试过读心 R 包,但都失败了。

标签: r math plot ggplot2 spiral


【解决方案1】:

(我承认回答了标题中的请求,但不理解您的其余文本的要求,尽管我后来猜测了。)只需使用一对参数方程设置数据:

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()

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

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()

标签框似乎有一个最小尺寸,因为即使它们的size 为零,它们也是可见的。我确实得到了带有label.padding = unit(0.05, "lines")的更小的“标签框”

【讨论】:

  • 正是我要找的东西——谢谢,我真的很想用更精细的细节来绘制,所以我必须看看我是否可以让它达到 100 或者用 openGL 像素化它,现在我知道它的可能
【解决方案2】:

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')

【讨论】:

    猜你喜欢
    • 2019-07-29
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    • 2021-10-14
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多