R语言使用自定义函数绘制contour等高线图报错及输出异常求解
问题排查与修复方案
核心问题原因
outer()函数使用错误:原代码未传入自定义计算函数,默认计算的是y1和y2的外积矩阵,和你需要的y_t网格计算结果完全不符- y_t的计算逻辑错误:原代码仅对y1、y2的对等位置元素做计算,没有覆盖两个变量所有取值组合的网格点
- 随机误差维度不匹配:原代码生成的e_1长度仅等于y1的长度,无法匹配y1×y2网格点的矩阵维度
filled.contour()参数传入错误:该函数不能直接接收contour()的返回对象,需要直接传入x、y、z三个核心参数
修复后可运行代码
# 固定随机种子保证结果可复现,不需要可删除 set.seed(123) # 定义Y_{t-1}、Y_{t-2}的取值序列 y_1 <- seq(-1, 1, 0.05) y_2 <- seq(-1, 1, 0.05) # 用outer计算所有y1、y2组合对应的y_t值 z <- outer(y_1, y_2, function(yt1, yt2) { # 生成对应维度的正态误差 e_t <- rnorm(length(yt1), mean = 0, sd = 0.2) # 按公式计算y_t 0.8*yt1 - 0.5*yt2 + (-1.6*yt1 + yt2)/(1 + exp(-10*yt1)) + e_t }) # 绘制普通等高线图 contour(y_1, y_2, z, xlab = expression(Y[t-1]), ylab = expression(Y[t-2])) # 绘制填充等高线图 filled.contour(y_1, y_2, z, xlab = expression(Y[t-1]), ylab = expression(Y[t-2]), color.palette = terrain.colors)
补充说明
如果不需要每次绘图结果都变化,可以把随机误差e_t的生成放到outer外面,预先生成对应维度的矩阵即可,也可以根据需求调整等高线的层级、颜色映射等参数匹配参考示例的样式。
内容的提问来源于stack exchange,提问作者Warhawk1987
相关产品推荐
相关产品推荐

