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

Python绘制可调整大小的嵌套矩形:最佳库及功能需求咨询

在Python中实现可调整的嵌套矩形(含批量绘制方案)

推荐使用Matplotlib——它是Python生态中最成熟的绘图库之一,完全覆盖你的所有需求:精确控制图形位置与尺寸、自定义颜色、支持多行多列批量布局,且上手成本低。

核心需求实现思路

  • 内部矩形居中:通过外矩形中心坐标,结合当前层矩形的宽高,推导左上角坐标,确保每层矩形都居中对齐。
  • 尺寸可调:定义缩放比例参数,动态计算每层嵌套矩形的宽高。
  • 着色支持:为每层矩形指定自定义颜色(支持RGB值、十六进制码、Matplotlib预定义颜色名)。
  • 多行多列批量绘制:利用subplots函数创建网格布局的子图,在每个子图中独立绘制嵌套矩形。

完整实现代码

import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle

def draw_nested_rects(ax, center, outer_size, num_layers, scale_factor, colors):
    """
    在指定子图上绘制嵌套矩形
    :param ax: 子图对象
    :param center: 外矩形中心坐标 (x, y)
    :param outer_size: 外矩形的宽高 (width, height)
    :param num_layers: 嵌套层数
    :param scale_factor: 每层矩形的缩放比例(取值0-1)
    :param colors: 每层矩形的颜色列表,长度需匹配嵌套层数
    """
    current_width, current_height = outer_size
    for i in range(num_layers):
        # 计算当前矩形左上角坐标,保证居中
        x = center[0] - current_width / 2
        y = center[1] - current_height / 2
        # 创建并添加矩形补丁
        rect = Rectangle((x, y), current_width, current_height, color=colors[i], fill=True)
        ax.add_patch(rect)
        # 缩小尺寸,准备绘制下一层
        current_width *= scale_factor
        current_height *= scale_factor
    # 设置坐标轴范围,确保所有矩形完整显示
    ax.set_xlim(center[0] - outer_size[0]/2 - 5, center[0] + outer_size[0]/2 + 5)
    ax.set_ylim(center[1] - outer_size[1]/2 - 5, center[1] + outer_size[1]/2 + 5)
    # 隐藏坐标轴元素(可选,优化视觉效果)
    ax.set_xticks([])
    ax.set_yticks([])
    ax.spines[['top', 'right', 'bottom', 'left']].set_visible(False)

# 批量绘制:2行3列的嵌套矩形网格
rows, cols = 2, 3
fig, axes = plt.subplots(rows, cols, figsize=(12, 8))

# 为每个子图配置独立参数(演示灵活性)
subplot_params = [
    {"center": (50, 50), "outer_size": (80, 80), "num_layers": 3, "scale_factor": 0.7, "colors": ["#FFE4E1", "#FFB6C1", "#FF69B4"]},
    {"center": (50, 50), "outer_size": (90, 60), "num_layers": 4, "scale_factor": 0.65, "colors": ["#F0F8FF", "#B0E0E6", "#ADD8E6", "#87CEEB"]},
    {"center": (50, 50), "outer_size": (70, 90), "num_layers": 2, "scale_factor": 0.8, "colors": ["#F5DEB3", "#DEB887"]},
    {"center": (50, 50), "outer_size": (85, 85), "num_layers": 5, "scale_factor": 0.6, "colors": ["#98FB98", "#90EE90", "#8FBC8F", "#3CB371", "#2E8B57"]},
    {"center": (50, 50), "outer_size": (60, 80), "num_layers": 3, "scale_factor": 0.75, "colors": ["#D8BFD8", "#DDA0DD", "#EE82EE"]},
    {"center": (50, 50), "outer_size": (95, 70), "num_layers": 4, "scale_factor": 0.7, "colors": ["#FFFFE0", "#FFFACD", "#FAFAD2", "#FFD700"]}
]

# 遍历子图并绘制
for idx, ax in enumerate(axes.flat):
    draw_nested_rects(ax, **subplot_params[idx])

plt.tight_layout()
plt.show()

代码说明

  • 封装的draw_nested_rects函数可灵活调整嵌套层数、缩放比例、颜色方案,完全满足自定义需求。
  • 通过subplots创建的网格子图,支持任意行数和列数的批量绘制,每个子图可独立配置参数。
  • 利用Rectangle补丁实现矩形绘制,坐标计算逻辑确保所有嵌套矩形严格居中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 06:45:36