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

如何用Plottable库绘制带起止标注的进度条表格?

使用Plottable库实现带起止标注的进度条表格

问题背景

给定Pandas DataFrame:

import pandas as pd    
df = pd.DataFrame({'Grade':[2,3,4,5], 'start':[0,0,20,10], 'end':[100,90,80,100]})

需要生成包含两列的表格:

  • 第一列显示Grade值
  • 第二列名为Progress,显示从start到end的进度条(优先绿色箭头样式),x轴范围固定0-100
  • 进度条需标注start和end值,且标注位于进度条两侧;当start不为0时,进度条从对应位置开始

已找到柱状图示例,但无法控制标注位置和获取每行的start/end参数,需要解决方案。

解决方案

1. 自定义箭头进度条绘图函数

Plottable允许自定义plot_fn,我们可以直接访问每行数据,实现带标注的箭头进度条逻辑:

import matplotlib.pyplot as plt
from plottable import Table
from plottable.columns import ColumnDefinition

def progress_arrow(ax, row_data, height=0.4, color="#2ecc71"):
    # 获取当前行的起止值
    start = row_data["start"]
    end = row_data["end"]
    
    # 固定x轴范围为0-100
    ax.set_xlim(0, 100)
    ax.set_ylim(-height, height)
    
    # 绘制绿色箭头进度条
    ax.arrow(start, 0, end - start, 0, 
             head_width=height*0.8, head_length=2, 
             fc=color, ec=color, lw=2)
    
    # 手动添加起止标注,分别对齐箭头两侧
    ax.text(start, 0, f"{start}", ha="right", va="center", fontsize=8)
    ax.text(end, 0, f"{end}", ha="left", va="center", fontsize=8)
    
    # 隐藏冗余坐标轴元素
    ax.set_yticks([])
    ax.spines[["top", "right", "left", "bottom"]].set_visible(False)

2. 配置表格列并生成可视化

将自定义函数绑定到Progress列,同时配置Grade列的显示样式:

# 定义列配置规则
columns = [
    ColumnDefinition("Grade", width=0.8, text_kw={"ha": "center"}),
    ColumnDefinition(
        "Progress",
        width=3,
        plot_fn=progress_arrow,
        plot_kw={"height": 0.4, "color": "#2ecc71"}
    )
]

# 生成并显示表格
fig, ax = plt.subplots(figsize=(6, 2))
table = Table(df, columns=columns, ax=ax)
plt.tight_layout()
plt.show()

关键说明

  • 自定义plot_fn可以直接获取row_data参数,解决了单行start/end值的获取问题
  • 通过ax.text手动控制标注位置,确保start标注右对齐在箭头起点、end标注左对齐在箭头终点
  • 箭头样式可通过plt.arrow的参数调整颜色、箭头大小等,适配不同视觉需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 17:43:18