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

Matplotlib绘制异常线条:如何为每层矩形设置不同颜色?

解决Matplotlib分层矩形绘制异常与配色问题

看起来你现在碰到了两个核心问题:一是绘制矩形时出现异常线条,二是需要实现多层矩形的不同配色。咱们先拆解原代码里的问题,再给出完整的解决方案。

原代码的问题分析

  • 变量名冲突:全局的width/height和循环内的局部变量重名,会直接覆盖画布尺寸的初始值,导致后续逻辑混乱
  • 循环逻辑缺失:while循环里没有更新box的坐标,要么死循环,要么根本生成不了多层矩形
  • 代码不完整与变量缺失:最后一行heatmap[box[1] + j][box[2]] = ...未补全,且没有定义value变量,没法区分不同层级的颜色
  • 潜在索引混淆:虽然原代码的索引方向是对的,但需要明确heatmap[y][x]对应画布的(y,x)坐标,避免后续出错

完整解决方案代码

import numpy as np
import matplotlib.pyplot as plt

# 全局画布尺寸,避免和矩形局部宽高重名
canvas_width = 416
canvas_height = 416
# 初始化全零热力图数组
heatmap = np.zeros((canvas_height, canvas_width), dtype='float')

# 初始矩形框格式:[x1, y1, x2, y2],对应左上角(x1,y1)、右下角(x2,y2)
box = [60, 50, 100, 100]
# 每层矩形的收缩步长,控制层与层之间的间距
step = 5
# 初始颜色值,每层递增,确保不同层级颜色唯一
current_value = 1.0

# 循环生成多层矩形,直到矩形宽高小于步长(无法再收缩)
while (box[2] - box[0]) > step and (box[3] - box[1]) > step:
    box_width = box[2] - box[0]
    box_height = box[3] - box[1]
    
    # 绘制矩形上下边框
    for x in range(box[0], box[2]):
        heatmap[box[1]][x] = current_value
        heatmap[box[3]][x] = current_value
    # 绘制矩形左右边框
    for y in range(box[1], box[3]):
        heatmap[y][box[0]] = current_value
        heatmap[y][box[2]] = current_value
    
    # 更新矩形框:向内收缩step
    box = [box[0]+step, box[1]+step, box[2]-step, box[3]-step]
    # 更新颜色值,每层加1,保证颜色区分度
    current_value += 1.0

# 可视化热力图,用区分度高的色卡
plt.imshow(heatmap, cmap='viridis', origin='lower')
# 添加颜色条,展示不同值对应的颜色
plt.colorbar()
plt.title('分层矩形边框热力图')
plt.show()

关键修复与优化点

  • 变量名区分:把全局画布尺寸改成canvas_width/canvas_height,彻底避免和矩形局部宽高的命名冲突
  • 分层逻辑落地:每次循环后将矩形框向内收缩step,同时递增current_value,确保每层颜色值唯一
  • 补全绘制逻辑:完成了左右边框的绘制代码,保证矩形边框完整无缺
  • 循环终止条件:当矩形宽高小于等于步长时停止,避免生成无意义的极小矩形
  • 可视化优化:用origin='lower'让坐标和我们日常习惯的(x,y)一致,搭配viridis色卡让不同层级颜色区分明显

如果你需要的是填充式分层矩形(不是边框),可以把边框绘制的代码替换成填充逻辑:

# 替换原边框代码为填充逻辑
heatmap[box[1]:box[3]+1, box[0]:box[2]+1] = current_value

这样每层会是一个实心填充的矩形,同样能实现分层配色的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:07:55