繁体   English   中英

将连续函数绘制为轮廓图

[英]Plotting a continuous function as a contour plot

我正在基于我创建的函数创建连续的轮廓/热图。 该图将基于给定的输入以及ax和y极限,然后函数以每0.01个增量的轮廓生成热图。

# var 1 to 3 are given as inputs and do not change.
var1 = 3
var2 = 1
var3 = 0.02

# x and y are additional variables, but they are plotted within a range 
# on the chart, xlim = c(0, 24), ylim = c(0, 0.05)

# Given var 1 to 3, and the ranges x and y, plot the result (z) as a heat map and/or contour
result <- function(var1, var2, var3,x, y){
  var2 * (1 + (x/12) * var3) * (1 + -var1 * y)
}

# sample output at point x = 12, y = 0.02, and equals 0.9588 in this example.
result(var1 = 3, var2 = 1,var3 = 0.02,
   x=12, 
   y=0.02)

下表显示了我要完成的工作,尽管它是从Web提取的,并且与我提供的数据无关。 我以前没有在轮廓图中使用连续函数。

在此处输入图片说明

您只需要正确地构造函数就可以执行几乎所有操作。

result <- function(var1, var2, var3,x, y,d){
ydata=numeric(length(seq(y[1],y[2],d)))
mat=matrix(NA,length(seq(y[1],y[2],d)),length(seq(x[1],x[2],d)))
yy=seq(y[1],y[2],d)
xx=seq(x[1],x[2],d)
for(i in 1:length(xx)){
for(n in 1:length(yy)){
ydata[n]=var2 * (1 + (xx[i]/12) * var3) * (1 + -var1 * yy[n])
}
mat[,i]=ydata
}
return(mat)}

您的image很奇怪,因此在将其输入image之前,您需要旋转矩阵。 您可以使用像我在stackoverflow上的某个地方这样的简单函数。

rotate <- function(x) t(apply(x, 2, rev))

那你就准备好了

mydata=result(var1 = 3, var2 = 1,var3 = 0.02,x=c(-1200,1200),y=c(-3005,2008),d=10)
image(rotate(mydata))
par(new=TRUE)
contour(mydata)

我将让该图看起来对您来说很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM