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

如何将图边成本平滑映射到RGB色彩(深绿至红渐变)?

问题

需要可视化一张包含节点和边的图,每条边关联一个成本。希望根据每条边的成本与所有边最大成本的接近程度,用不同色调展示边的成本。当前采用分段设置颜色的方式(代码如下),但想要实现基于归一化成本的深绿色到红色的平滑色彩过渡,找不到具体映射方法。

当前分段实现代码:

# Normalize cost of the particular edge in a [0,1] interval
norm_cost = (edge_cost - min_cost) / (max_cost - min_cost)
# Set colors based on cost
if norm_cost <= 0.1:
    edge_marker.color.r = 41 / 255
    edge_marker.color.g = 171 / 255  # dark green
    edge_marker.color.b = 67 / 255
elif 0.1 < norm_cost <= 0.25:
    edge_marker.color.r = 43 / 255
    edge_marker.color.g = 209 / 255  # light green
    edge_marker.color.b = 65 / 255
elif 0.25 < norm_cost <= 0.5:
    edge_marker.color.r = 255 / 255
    edge_marker.color.g = 255 / 255  # yellow
    edge_marker.color.b = 0 / 255
elif 0.5 < norm_cost <= 0.75:
    edge_marker.color.r = 255 / 255
    edge_marker.color.g = 126 / 255  # orange
    edge_marker.color.b = 0 / 255
elif 0.75 < norm_cost <= 1:
    edge_marker.color.r = 255 / 255
    edge_marker.color.g = 0 / 255  # red
    edge_marker.color.b = 0 / 255

平滑色彩过渡实现方法

核心思路是对RGB三个通道分别做线性插值:从你指定的深绿色(RGB:41,171,67)过渡到红色(RGB:255,0,0),利用归一化后的norm_cost(范围[0,1])作为插值权重,计算每条边对应的RGB值。

具体步骤

  1. 定义起始色(深绿)和终点色(红)的RGB值(先保留0-255范围,最后再除以255转成0-1):

    • 起始色(低成本,norm_cost=0):start_r, start_g, start_b = 41, 171, 67
    • 终点色(高成本,norm_cost=1):end_r, end_g, end_b = 255, 0, 0
  2. 对每个通道计算插值后的颜色值:
    插值公式为:当前通道值 = 起始值 + (终点值 - 起始值) * norm_cost

  3. 将计算结果除以255,转换为0-1范围的颜色值,赋值给边的颜色属性。

代码实现

替换原来的分段判断代码,改成以下逻辑:

# 归一化成本(保持原有逻辑)
norm_cost = (edge_cost - min_cost) / (max_cost - min_cost)

# 定义起始深绿色和终点红色的RGB值(0-255范围)
start_r, start_g, start_b = 41, 171, 67
end_r, end_g, end_b = 255, 0, 0

# 线性插值计算当前边的RGB值
current_r = start_r + (end_r - start_r) * norm_cost
current_g = start_g + (end_g - start_g) * norm_cost
current_b = start_b + (end_b - start_b) * norm_cost

# 转换为0-1范围的颜色值并赋值
edge_marker.color.r = current_r / 255
edge_marker.color.g = current_g / 255
edge_marker.color.b = current_b / 255

原理说明

  • 当norm_cost=0(成本最低)时,计算出的颜色就是你指定的深绿色;
  • 当norm_cost=1(成本最高)时,颜色就是纯红色;
  • 中间的norm_cost值会得到两种颜色之间的平滑过渡色,比如成本中等时会呈现黄绿、橙红等过渡色调,完全不需要分段判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:25:51