在磁盘内绘制随机样本
Plot random samples inside a disk
我正在尝试绘制半径为 1 的圆盘内 N 个样本的数据,但我不确定该怎么做。
经过一些研究,runifdisc
似乎是寻找结果的函数,但是,我无法在不产生错误的情况下得到这个函数 运行。
Error in runifdisc(100) : could not find function "runifdisc"
下图展示了我如何绘制数据。我是 R 的新手,如果能深入了解我如何解决这个问题,我将不胜感激。
磁盘均匀分布
double a = random() * 2 * PI
double r = R * sqrt(random())
// Cartesian coordinates
double x = r * cos(a)
double y = r * sin(a)
实际上不需要依赖包来做这件事。推出自己的功能非常容易。这里有两种可能的方法。第一个是粗略的,但也许更容易理解。第二个稍微复杂一些。两者都基于 tidyverse。
library(tidyverse)
选项 1:在正方形内随机生成点,然后过滤以仅保留圆盘内的那些点。
runifdisc1 <- function(k, n=2000) {
# Crude approach: need to ensure n is sfficiently larger than k to
# ensure at least k points lie within the unit curcle
tibble(x=runif(n, -1, 1), y=runif(n, -1, 1)) %>%
filter(x*x + y*y <= 1) %>%
head(k) %>%
ggplot() +
geom_point(aes(x=x, y=y)) +
coord_fixed(ratio=1)
}
runifdisc1(500)
方案二:用极坐标co-ordinates在单位圆盘内生成点,然后变换为笛卡尔坐标co-ordinates。
runifdisc2 <- function(k) {
# More sophisticated approach: polar co-ordinates
tibble(theta=runif(k, -pi, pi), r=runif(k), x=r*cos(theta), y=r*sin(theta))%>%
ggplot() +
geom_point(aes(x=x, y=y)) +
coord_fixed(ratio=1)
}
runifdisc2(500)
应该有直接画极坐标的方法,不知道是什么。谁能给点建议?
回答我自己的问题:
runifdisc3 <- function(k) {
tibble(theta=runif(k, -pi, pi), r=runif(k)) %>%
ggplot() +
geom_point(aes(x=theta, y=r)) +
coord_polar("x")
}
runifdisc3(500)
我正在尝试绘制半径为 1 的圆盘内 N 个样本的数据,但我不确定该怎么做。
经过一些研究,runifdisc
似乎是寻找结果的函数,但是,我无法在不产生错误的情况下得到这个函数 运行。
Error in runifdisc(100) : could not find function "runifdisc"
下图展示了我如何绘制数据。我是 R 的新手,如果能深入了解我如何解决这个问题,我将不胜感激。
磁盘均匀分布
double a = random() * 2 * PI
double r = R * sqrt(random())
// Cartesian coordinates
double x = r * cos(a)
double y = r * sin(a)
实际上不需要依赖包来做这件事。推出自己的功能非常容易。这里有两种可能的方法。第一个是粗略的,但也许更容易理解。第二个稍微复杂一些。两者都基于 tidyverse。
library(tidyverse)
选项 1:在正方形内随机生成点,然后过滤以仅保留圆盘内的那些点。
runifdisc1 <- function(k, n=2000) {
# Crude approach: need to ensure n is sfficiently larger than k to
# ensure at least k points lie within the unit curcle
tibble(x=runif(n, -1, 1), y=runif(n, -1, 1)) %>%
filter(x*x + y*y <= 1) %>%
head(k) %>%
ggplot() +
geom_point(aes(x=x, y=y)) +
coord_fixed(ratio=1)
}
runifdisc1(500)
方案二:用极坐标co-ordinates在单位圆盘内生成点,然后变换为笛卡尔坐标co-ordinates。
runifdisc2 <- function(k) {
# More sophisticated approach: polar co-ordinates
tibble(theta=runif(k, -pi, pi), r=runif(k), x=r*cos(theta), y=r*sin(theta))%>%
ggplot() +
geom_point(aes(x=x, y=y)) +
coord_fixed(ratio=1)
}
runifdisc2(500)
应该有直接画极坐标的方法,不知道是什么。谁能给点建议?
回答我自己的问题:
runifdisc3 <- function(k) {
tibble(theta=runif(k, -pi, pi), r=runif(k)) %>%
ggplot() +
geom_point(aes(x=theta, y=r)) +
coord_polar("x")
}
runifdisc3(500)