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

如何在R的ggplot中为约束条件图填充可行域?

用ggplot填充线性规划可行域的方法

你当前的代码用stat_function画出了两条约束线,但要填充它们和坐标轴围合的可行域,geom_abline并不适用,推荐用geom_ribbon来实现。下面是修改后的完整代码:

library(ggplot2)

# 生成密集的x值,保证填充区域平滑无断层
x_seq <- seq(0, 200, length.out = 100)
# 计算两条约束线对应的y值
y1 <- (100 - 0.20*x_seq)/0.70
y2 <- 200 - x_seq
# 确定可行域的上边界:取两条约束线的最小值(可行域在两条线下方)
y_upper <- pmin(y1, y2)
# 可行域的下边界为y=0
y_lower <- rep(0, length(x_seq))

# 组合成用于填充的数据框
fill_df <- data.frame(Budget = x_seq, y_lower = y_lower, y_upper = y_upper)

ggplot() +
  # 填充可行域区域
  geom_ribbon(data = fill_df, aes(x = Budget, ymin = y_lower, ymax = y_upper), 
              fill = "lightblue", alpha = 0.3) +
  # 绘制两条约束线
  stat_function(fun = \(x) (100 - 0.20*x)/0.70, aes(color = "约束线1"), size = 1) +
  stat_function(fun = \(x) (200 - x), aes(color = "约束线2"), size = 1) +
  # 设置坐标轴与标题
  labs(y = "空间", color = "约束条件") +
  ggtitle("羽衣甘蓝与欧洲防风草种植规划") +
  # 限制坐标轴范围匹配可行域
  xlim(0, 200) +
  ylim(0, max(y1, y2)) +
  theme_minimal()

核心要点说明:

  • geom_ribbon:专门用于填充两个y值区间的区域,必须指定ymin(下边界)和ymax(上边界)。
  • 密集x序列:用seq生成足够多的x点,避免填充区域出现断层或锯齿。
  • pmin函数:取两条约束线的最小值,确定可行域的上边界;若你的可行域在两条线上方,替换为pmax即可。
  • 透明度alpha:调整填充色的透明度,避免遮挡下方的约束线。

内容的提问来源于stack exchange,提问作者Riddle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 08:37:44