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

如何在Python Tkinter中将条形图改为等高宽同水平线的矩形块?

等高等宽水平排列矩形的坐标设置方案

你需要取消矩形高度和数据值的绑定,统一固定所有矩形的高度,重新计算均匀分布的等宽x坐标即可,具体坐标设置逻辑和修改后的代码如下:


坐标设置逻辑

y轴坐标(控制等高+同水平线)

所有矩形共享固定的上下y坐标,高度完全固定,不随数据变化:

  • 先自定义固定矩形高度,比如bar_height = 40(可自行调整数值修改矩形高度)
  • 统一设置底部y坐标:y1 = c_height - 20(距离画布底部留20px边距,数值越小矩形整体越靠上)
  • 统一设置顶部y坐标:y0 = y1 - bar_height,保证所有矩形高度一致,上下边缘都在同一条水平线上

x轴坐标(控制等宽+均匀排列)

扣除边距和间距后平分横向可用宽度,保证所有矩形宽度一致、间距均匀:

  • 画布横向可用宽度:available_x = c_width - 2 * offset(左右各留30px边距,和原代码逻辑对齐)
  • 每个矩形的固定宽度:bar_width = (available_x - (len(data) + 1)*spacing) / len(data)
  • 第i个矩形的左x坐标:x0 = offset + spacing + i * (bar_width + spacing)
  • 第i个矩形的右x坐标:x1 = x0 + bar_width

修改后完整代码

def drawData(data, colorArray):
    canvas.delete("all")
    c_height = 380
    c_width = 600
    offset = 30
    spacing = 10
    # 自定义固定矩形高度,可自行调整
    bar_height = 40
    # 计算等宽矩形的宽度
    available_x = c_width - 2 * offset
    bar_width = (available_x - (len(data) + 1)*spacing) / len(data)
    # 固定y坐标,所有矩形共用
    y1 = c_height - 20
    y0 = y1 - bar_height
    for i in range(len(data)):
        # 计算当前矩形的x坐标
        x0 = offset + spacing + i * (bar_width + spacing)
        x1 = x0 + bar_width
        # 画矩形
        canvas.create_rectangle(x0, y0, x1, y1, fill=colorArray[i])
        # 数据文本调整为矩形上方居中显示
        canvas.create_text(x0 + bar_width/2, y0 - 5, anchor=S, text=str(data[i]))

    root.update_idletasks()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:36:06