Постройте спираль Архимеда, используя целочисленные значения с помощью ggplot2

Как нарисовать вихрь в R? Я пытаюсь составить список чисел 1:100, и каждое 7-е число присваивает ему коэффициент «1», все остальные просто «0». У меня также есть вектор TRUE или FALSE . Как нарисовать вихрь этих чисел и выделить каждое седьмое число? Пытаюсь посмотреть, смогу ли я сжать или ослабить вихрь (тета), чтобы выровнять 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

person user2038042    schedule 30.12.2016    source источник
comment
ближе всего я могу прийти к построению с использованием полярных координат, это следующее   -  person user2038042    schedule 30.12.2016
comment
ссылка на код   -  person user2038042    schedule 30.12.2016
comment
уравнение находится здесь ссылка извините за все эти мелкие детали, не могу редактировать исходный пост   -  person user2038042    schedule 30.12.2016
comment
Оба уравнения, использующие ggplot, разработали view, но они нанесли все точки, я хочу построить 7 ,14,21, 28, 35, 42... и т.д. Они будут наложены на вихрь. Даже если бы я мог просто построить вектор fo.sev, я бы закончил. БЛАГОДАРНОСТЬ!   -  person user2038042    schedule 30.12.2016
comment
Вы должны использовать edit, чтобы более подробно объяснить, что вы подразумеваете под графиком этих чисел и вихрем. Предположительно, вы хотите, чтобы 7, 14 и т. д. брали на себя роль x (или y), но не объясняли, каким должен быть y (или x). Несколько человек пытались читать мысли пакетов R, но все потерпели неудачу.   -  person IRTFM    schedule 30.12.2016


Ответы (2)


(Я признаю, что ответил на запрос в заголовке, но не понял, что запрашивает остальная часть вашего текста, хотя позже я сделал предположение.) Просто настройте данные с помощью пары параметрических уравнений:

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

person IRTFM    schedule 30.12.2016
comment
Именно то, что я ищу - спасибо, я действительно хочу построить график с более мелкими деталями, поэтому мне нужно посмотреть, смогу ли я получить его, возможно, до 100, или пикселизировать его с помощью openGL, теперь, когда я знаю, что это возможно - person user2038042; 03.01.2017

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

введите здесь описание изображения

person Sandipan Dey    schedule 30.12.2016