编辑代码

import matplotlib.pyplot as plt
import matplotlib.patches as patches

# 创建画布和坐标轴
fig, ax = plt.subplots(figsize=(8, 6))

# 绘制木框架(长方形状立式架子)
frame_width = 80  # 架子宽度(单位:cm)
frame_height = 120  # 架子高度(单位:cm)

# 绘制架子外框(棕色虚线表示)
ax.add_patch(patches.Rectangle(
    (10, 10),  # 左下角坐标
    frame_width, 
    frame_height,
    fill=False, 
    linewidth=3, 
    edgecolor='brown',
    linestyle='--'
))

# 绘制奶粉罐排列(并排串联,瓶口朝上斜嵌入)
can_diameter = 12  # 奶粉罐直径(单位:cm)
can_height = 15  # 奶粉罐高度(单位:cm)
can_spacing = 4  # 奶粉罐间距(单位:cm)

# 计算每层可放置的奶粉罐数量(留出边缘空间)
cans_per_layer = (frame_width - 20) // (can_diameter + can_spacing)

# 绘制3层奶粉罐作为示例
for layer in range(3):
    y_base = 30 + layer * (can_height + 15)  # 每层基础Y坐标
    for i in range(cans_per_layer):
        x_center = 20 + i * (can_diameter + can_spacing) + can_diameter/2
        
        # 绘制奶粉罐主体(浅蓝色圆形)
        ax.add_patch(patches.Circle(
            (x_center, y_base + can_height/2), 
            can_diameter/2,
            color='lightblue',
            alpha=0.7
        ))
        
        # 绘制斜嵌入的瓶口(银色矩形)
        ax.add_patch(patches.Rectangle(
            (x_center - 2, y_base + can_height - 3),  # 左下角坐标
            4,  # 宽度
            6,  # 高度
            angle=15,  # 倾斜角度
            color='silver'
        ))

# 添加铆钉固定点标记(灰色圆点)
for i in range(cans_per_layer - 1):
    x_pos = 20 + (i + 0.5) * (can_diameter + can_spacing) + can_diameter/2
    # 顶部铆钉
    ax.plot(x_pos, 30 + can_height + 5, 'o', color='gray', markersize=8)
    # 底部铆钉(示意位置)
    ax.plot(x_pos, 30 - 5, 'o', color='gray', markersize=8)

# 设置显示范围和比例
ax.set_xlim(0, frame_width + 40)
ax.set_ylim(0, frame_height + 40)
ax.set_aspect('equal')
ax.axis('equal')
ax.axis('off')  # 隐藏坐标轴

# 添加文字说明
plt.figtext(0.1, 0.95, "奶粉罐玩具收纳架示意图", fontsize=12, fontweight='bold')
plt.figtext(0.1, 0.92, "1. 棕色虚线框表示木质框架(80cm×120cm)", fontsize=9)
plt.figtext(0.1, 0.89, "2. 每层可放置{}个奶粉罐".format(cans_per_layer), fontsize=9)
plt.figtext(0.1, 0.86, "3. 灰色圆点表示铆钉固定点", fontsize=9)
plt.figtext(0.1, 0.83, "4. 银色矩形表示斜嵌入的瓶口", fontsize=9)

# 显示图像(在线环境会自动渲染)
plt.show()