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
相关产品推荐
相关产品推荐

