You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于多二元函数最大值划分x-y平面区域并使用ggplot绘图

问题解决:用ggplot绘制二元函数最大值区域的可视化

原代码存在的问题

  • 仅遍历了x和y的对应索引元素(如x[1]配y[1]),未生成完整的x-y网格点,无法覆盖整个0-100的平面区域
  • 计算函数值列表v时重复调用了f3,遗漏了f4
  • f2(x,y)=y log(x)中,x=0时log(0)无定义,会引发计算错误
  • ggplot调用语法错误:未在aes中映射vmax作为颜色变量,也未添加可视化图层(如geom_tile)

修正后的代码实现

library(ggplot2)
library(dplyr)

# 定义四个二元函数
f1 <- function(x,y) 5*x + 2*y
f2 <- function(x,y) y * log(x)
f3 <- function(x,y) x*y/10 
f4 <- function(x,y) x^3 - 5*y

# 生成完整的x-y网格点(x从1开始避免log(0)错误,步长可根据精度调整)
x <- seq(1, 100, by = 1)
y <- seq(0, 100, by = 1)
df <- expand.grid(x = x, y = y)

# 计算每个点的四个函数值,并找出最大值对应的函数编号
df <- df %>%
  mutate(
    val1 = f1(x, y),
    val2 = f2(x, y),
    val3 = f3(x, y),
    val4 = f4(x, y),
    # 找出最大值对应的函数(1-4),并转为因子方便ggplot分组着色
    max_func = factor(which.max(cbind(val1, val2, val3, val4)),
                     labels = c("f1=5x+2y", "f2=y log(x)", "f3=xy/10", "f4=x³-5y"))
  )

# 绘制热力图,用不同颜色区分各函数的最大值区域
ggplot(df, aes(x = x, y = y, fill = max_func)) +
  geom_tile() +
  scale_fill_brewer(palette = "Set1") +
  labs(title = "各区域最大值对应的二元函数",
       x = "x", y = "y", fill = "最大值函数") +
  theme_minimal()

代码说明

  • 用expand.grid生成所有x-y组合的网格点,确保覆盖整个0-100平面
  • 调整x的起始值为1,避免log(0)的计算错误
  • 使用dplyr的mutate批量计算函数值,通过which.max(cbind(...))高效找出每个点的最大值函数
  • 用geom_tile绘制热力图,配合scale_fill_brewer设置区分度高的颜色方案
  • 将函数编号转为带标签的因子,让图例更直观

内容的提问来源于stack exchange,提问作者簡楷懋

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 02:36:20