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

Matplotlib散点图添加Pareto front(帕累托前沿)显示异常问题求解

错误原因排查
  • 帕累托点识别逻辑错误:identify_pareto函数的最优判断条件写反,比如你要最小化两个目标却写了最大化的判断逻辑,导致最终只筛选到1-2个有效帕累托点,连线后自然只有极短的线段
  • 排序逻辑错误:筛选到帕累托点后,只按第一维(x轴)做升序排序,没有对应匹配第二维(y轴)的顺序,或是排序后错误切片只取了部分点用于绘图
  • 绘图参数错误:调用plot绘制前沿线时,误将单个点的坐标传入,或是线宽、颜色透明度设置异常导致线不可见
修复步骤
  1. 先修正identify_pareto函数的判断逻辑,以最常见的两个目标均最小化的场景为例,正确的识别逻辑如下:
import numpy as np

def identify_pareto(scores):
    # scores是形状为(n,2)的numpy数组,每行是一个样本的两个目标值
    population_size = scores.shape[0]
    pareto_front = np.ones(population_size, dtype=bool)
    for i in range(population_size):
        for j in range(population_size):
            # 判断j是否支配i:j的两个目标都小于等于i,且至少一个严格小于
            if all(scores[j] <= scores[i]) and any(scores[j] < scores[i]):
                pareto_front[i] = False
                break
    return scores[pareto_front]
  1. 对返回的帕累托点做正确排序:按第一维目标升序排序,对应第二维目标会自动呈降序排列,符合最小化双目标的帕累托前沿形态
pareto_points = identify_pareto(你的15组二维数据)
# 按x轴(第一列)升序排序
sorted_pareto = pareto_points[np.argsort(pareto_points[:, 0])]
  1. 绘图时传入完整的排序后点坐标,设置合理的线宽:
import matplotlib.pyplot as plt
# 先画原始散点
plt.scatter(你的数据[:,0], 你的数据[:,1], c='blue', label='原始样本')
# 画帕累托前沿线+帕累托点标记
plt.plot(sorted_pareto[:,0], sorted_pareto[:,1], c='red', linewidth=2, marker='o', label='帕累托前沿')
plt.legend()
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 11:36:01