R:函数的等值线图

R: Contour Plots for Functions

我正在使用 R 编程语言。

我正在尝试为以下函数制作等值线图:

library(plotly)


  my_function <- function(x,y) {
    
    final_value = x^2 + y^2
    }


input_1 <- seq(-1.5, 1.5,0.1)
input_2 <- seq(-1.5, 1.5,0.1)


z <- outer(input_1, input_2, my_function)

plot_ly(x = input_1, y = input_2, z = z) %>% add_surface()

我正在尝试按照此处 link 的说明进行操作:https://r-charts.com/correlation/contour-plot-ggplot2/。在此 link 中,它展示了如何为包含两个不同变量值的数据框绘制等高线图。就我而言,看起来我已经有了一个名为“z”的矩阵。我尝试使用网站上的代码:

# install.packages("ggplot2")
library(ggplot2)

# Data
set.seed(1)

z = data.frame(z)

ggplot(z, aes(x = input_1, y = input_2)) +
  geom_density_2d_filled()

谁能告诉我我做的是否正确?这是使用 ggplot2 为函数绘制等值线图(水平图)的方式吗?

我持怀疑态度的原因是因为我尝试对完全不同的函数 (https://en.wikipedia.org/wiki/Rastrigin_function) 重复此过程并得到非常相似的结果:

 my_function <- function(x1, x2) {
    
    final_value = 20 + x1^2 + x2^2 - 10*(cos(2*pi*x1) + cos(2*pi*x2))
    }


x1 <- seq(-5, 5,0.1)
x2 <- seq(-5, 5,0.1)


z <- data.frame(outer(x1, x2, my_function))


ggplot(z, aes(x = x1, y = x2)) +
  geom_density_2d_filled()

z <- outer(x1, x2, my_function)

plot_ly(x = x1, y = x2, z = z) %>% add_surface()

我认为这是不正确的——这两个函数看起来完全不同,我怀疑它们会有相同的等高线图。这让我怀疑并认为我做错了什么。

谢谢!

注意: 理想情况下,第二个函数的等高线图应如下所示:https://upload.wikimedia.org/wikipedia/commons/0/0e/Rastrigin-smooth-contour.svg

我们可以试试这个

expand.grid(X1 = x1, X2 = x2) %>%
  mutate(Z = my_function(X1, X2)) %>%
  ggplot(aes(X1, X2, z = Z)) +
  geom_contour() +
  geom_contour_filled()