Постройте архимедову спираль, используя целочисленные значения с помощью ggplot2
Как вы рисуете вихрь в R? Я пытаюсь составить список чисел 1:100, и каждому седьмому числу присваивают ему коэффициент "1", всем остальным просто "0". У меня также есть вектор ИСТИНА или ЛОЖЬ. Как мне построить вихрь этих чисел и выделить каждое седьмое число? Попытка выяснить, могу ли я затянуть или ослабить вихрь (тета), чтобы выровнять 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 ответа
(Я признаю, что отвечал на запрос в названии, но не понимал, о чем просил остальной текст, хотя позже я сделал предположение.) Просто настройте данные с помощью пары параметрических уравнений:
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")
Из 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')