如何将图边成本平滑映射到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值。
具体步骤
定义起始色(深绿)和终点色(红)的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
- 起始色(低成本,norm_cost=0):
对每个通道计算插值后的颜色值:
插值公式为:当前通道值 = 起始值 + (终点值 - 起始值) * norm_cost将计算结果除以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
相关产品推荐
相关产品推荐

