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

