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

使用Python turtle模块绘制带填充色的披萨销量堆叠条形图

实现代码

以下是完整的draw_bar_chart函数实现,已经包含颜色填充、坐标轴绘制、文字标注的全部逻辑,可直接运行:

import turtle

# 全局配置参数,可根据展示需求自行调整
BAR_WIDTH = 80  # 条形宽度
PIXEL_PER_SALE = 2  # 每单位销量对应的像素高度,避免数值过高超出画布
COLORS = ['#f8766d', '#7cae00', '#00bfc4', '#c77cff']  # 从下到上对应大厚底、大薄底、中厚底、中薄底的填充色
LABEL_FONT = ('微软雅黑', 12, 'normal')

def draw_bar_chart(record_date, large_thick, large_thin, medium_thick, medium_thin):
    # 初始化画笔
    t = turtle.Turtle()
    t.speed(0)
    t.penup()
    
    # 坐标轴原点设置,留出足够空间放文字标注
    origin_x, origin_y = -200, -150
    t.goto(origin_x - 20, origin_y)
    t.pendown()
    # 绘制x轴
    t.forward(400)
    t.penup()
    t.goto(origin_x + 370, origin_y - 5)
    t.write('日期', font=LABEL_FONT)
    # 绘制y轴
    t.goto(origin_x, origin_y)
    t.pendown()
    t.left(90)
    t.forward(350)
    t.penup()
    t.goto(origin_x - 30, origin_y + 320)
    t.write('销量', font=LABEL_FONT)
    
    # 汇总销量数据
    sale_list = [large_thick, large_thin, medium_thick, medium_thin]
    total_sale = sum(sale_list)
    
    # 移动到条形绘制起始位置
    bar_x = origin_x + 100
    current_y = origin_y
    t.goto(bar_x, current_y)
    t.pendown()
    
    # 逐层绘制堆叠矩形并填充对应颜色
    for idx, sale in enumerate(sale_list):
        if sale <= 0:
            continue
        height = sale * PIXEL_PER_SALE
        t.fillcolor(COLORS[idx])
        t.begin_fill()
        t.setheading(0) # 固定朝向为右,避免画笔方向混乱
        # 绘制矩形
        t.forward(BAR_WIDTH)
        t.left(90)
        t.forward(height)
        t.left(90)
        t.forward(BAR_WIDTH)
        t.left(90)
        t.forward(height)
        t.left(90)
        t.end_fill()
        # 抬升到上一层的绘制起点
        current_y += height
        t.penup()
        t.goto(bar_x, current_y)
        t.pendown()
    
    # 标注条形下方的日期
    t.penup()
    t.goto(bar_x + BAR_WIDTH/2, origin_y - 40)
    t.write(record_date, align='center', font=LABEL_FONT)
    
    # 标注条形顶部的总销量
    t.goto(bar_x + BAR_WIDTH/2, current_y + 10)
    t.write(f'总销量:{total_sale}', align='center', font=LABEL_FONT)
    
    t.hideturtle()
    turtle.done()

# 测试用例,运行后即可看到效果
if __name__ == '__main__':
    draw_bar_chart('2024-05-20', 25, 18, 30, 22)

关键说明

  • 颜色填充通过turtle自带的begin_fill()和end_fill()配对实现,绘制图形前设置好fillcolor即可生效
  • 堆叠逻辑是每画完一层就把y轴起点抬升到当前层的顶部,再绘制上一层
  • 代码开头的全局参数可根据你的需求随时调整条形宽度、高度比例、配色方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:24:07