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

如何在Matplotlib中绘制含字符字段的元组数据

在Matplotlib中绘制对比式字符表格

嘿,我来帮你搞定这个需求!虽然Matplotlib主打绘图功能,但咱们可以通过手动绘制文本和线条的方式,实现你想要的这种对比表格效果。下面是具体的实现思路和代码:

步骤说明

  1. 先把两个元组转换成字典,这样能快速根据数字ID找到对应的字符值,省得逐个查找;
  2. 整理出所有需要展示的数字ID(从10956到10947),确保覆盖两个列表里的所有条目;
  3. 在Matplotlib画布上,用text()函数逐个绘制每个单元格的文本内容,再用plot()函数绘制分隔线;
  4. 最后添加上表头,完成整个表格的绘制。

完整代码示例

import matplotlib.pyplot as plt

# 你的原始数据
L1 = [(10955, 'A'), (10954, 'A'), (10953, 'A'), (10952, 'AB'), (10951, 'AB'), (10950, 'AB'), (10949, 'AB'), (10948, 'ABC')]
L2 = [(10956, 'AB'), (10955, 'AB'), (10954, 'A'), (10953, 'ABC'), (10952, 'DEF'), (10951, 'ABC'), (10950, 'AB'), (10949, 'ABC'), (10948, 'ABC'), (10947, 'ABCD')]

# 转换为字典,方便快速查找
dict_L1 = dict(L1)
dict_L2 = dict(L2)

# 所有需要展示的ID,从大到小排列
all_ids = list(range(10947, 10957))[::-1]

# 初始化画布
fig, ax = plt.subplots(figsize=(6, 5))
ax.set_xlim(0, 3)  # 三个列:ID、L1、L2
ax.set_ylim(0, len(all_ids) + 2)  # 预留表头和底部空间
ax.axis('off')  # 隐藏坐标轴,只保留表格内容

# 绘制每一行的内容
for i, id_num in enumerate(all_ids):
    y_pos = len(all_ids) - i  # 从顶部开始绘制
    # 绘制ID列
    ax.text(0.5, y_pos, str(id_num), ha='center', va='center', fontsize=10)
    # 绘制L1列的内容,没有则留空
    l1_val = dict_L1.get(id_num, '')
    ax.text(1.5, y_pos, l1_val, ha='center', va='center', fontsize=10)
    # 绘制L2列的内容,没有则留空
    l2_val = dict_L2.get(id_num, '')
    ax.text(2.5, y_pos, l2_val, ha='center', va='center', fontsize=10)
    # 绘制行分隔线
    ax.plot([0, 3], [y_pos - 0.5, y_pos - 0.5], color='black', linewidth=0.5)

# 绘制列分隔线
ax.plot([1, 1], [0.5, len(all_ids) + 0.5], color='black', linewidth=0.5)
ax.plot([2, 2], [0.5, len(all_ids) + 0.5], color='black', linewidth=0.5)

# 绘制表头
ax.text(0.5, len(all_ids) + 1, 'ID', ha='center', va='center', fontsize=10, fontweight='bold')
ax.text(1.5, len(all_ids) + 1, 'L1', ha='center', va='center', fontsize=10, fontweight='bold')
ax.text(2.5, len(all_ids) + 1, 'L2', ha='center', va='center', fontsize=10, fontweight='bold')

plt.tight_layout()
plt.show()

代码解释

  • 转字典是为了O(1)时间复杂度的查找,比循环遍历高效得多;
  • 设置axis('off')是为了隐藏Matplotlib默认的坐标轴,让表格更干净;
  • 调整xlim和ylim控制表格范围,确保所有内容都能显示;
  • 用ha='center'和va='center'让文本在单元格里居中对齐,更符合表格的视觉效果;
  • 用plot()函数绘制横竖分隔线,模拟表格边框。

运行这段代码后,你就能得到和需求格式一致的字符表格啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:14:58