如何在Matplotlib中绘制含字符字段的元组数据
在Matplotlib中绘制对比式字符表格
嘿,我来帮你搞定这个需求!虽然Matplotlib主打绘图功能,但咱们可以通过手动绘制文本和线条的方式,实现你想要的这种对比表格效果。下面是具体的实现思路和代码:
步骤说明
- 先把两个元组转换成字典,这样能快速根据数字ID找到对应的字符值,省得逐个查找;
- 整理出所有需要展示的数字ID(从10956到10947),确保覆盖两个列表里的所有条目;
- 在Matplotlib画布上,用
text()函数逐个绘制每个单元格的文本内容,再用plot()函数绘制分隔线; - 最后添加上表头,完成整个表格的绘制。
完整代码示例
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
相关产品推荐
相关产品推荐

