我正在尝试在R中绘制Rastrigin function的轮廓。
为此,我创建了一个由三列x
,y
和value
组成的小标题。但是,由于函数签名是TF_rastrigin(x)
,其中x
是输入向量,因此在正确计算值时遇到了问题。我想要一个像这样的小标题:
x y value
-5.12 5.12 57.84943
-5.11 5.11 56.81394
...
为了将其传递给ggplot。我当前的代码如下:
install.packages("TestFunctions")
require(TestFunctions)
dim <- 100
mw <- tibble(x = seq(0, pi, length.out = dim), y = seq(0, pi, length.out = dim), value = TF_rastrigin(c(x,y)))
ggplot(mw, aes(x = x, y = y ,z = value)) +
geom_raster(aes(fill = value)) +
geom_contour()
谁能告诉我我做错了什么或提出更好的建议吗?
答案 0 :(得分:3)
首先,您希望x
和y
的定义不同:当前的x
和y
列是重合的,而您需要它们的值的所有可能组合。为此,我们可以使用expand.grid
。对于Rastrigin函数,我们可以简单地使用apply
逐行并分别在每个点获取函数值:
dim <- 100
mw <- expand.grid(x = seq(0, pi, length.out = dim),
y = seq(0, pi, length.out = dim))
mw$value <- apply(mw, 1, TF_rastrigin)
ggplot(mw, aes(x = x, y = y ,z = value)) +
geom_raster(aes(fill = value)) + geom_contour()