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

