如何在Matplotlib中缩写柱状图xticks标签并在图侧单独说明
在Matplotlib中为缩写X轴标签添加侧边说明的实现方法
当然可以实现,以下是两种实用方案:
方案一:直接在图表两侧添加文本注释
这种方式无需额外子图,直接在主图的左右侧对应柱子的位置添加全称说明,直观简洁。
import matplotlib.pyplot as plt # 模拟数据 short_labels = ['A', 'B', 'C', 'D'] # 缩写后的X轴标签 full_labels = ['十八字符长度的标签内容1', '十八字符长度的标签内容2', '十八字符长度的标签内容3', '十八字符长度的标签内容4'] bar_values = [12, 25, 18, 22] fig, ax = plt.subplots(figsize=(10, 6)) ax.bar(short_labels, bar_values) # 设置X轴刻度与缩写标签 ax.set_xticks(range(len(short_labels))) ax.set_xticklabels(short_labels) # 在左侧添加全称说明,对应每个柱子的垂直中心位置 for idx, full_name in enumerate(full_labels): # 计算Y轴位置,取柱子高度的中点 y_center = bar_values[idx] / 2 # 调整X轴偏移量,避免和柱子重叠 ax.text(-0.3, y_center, full_name, ha='right', va='center', fontsize=10) # 若需要右侧添加说明,取消下面代码注释 # for idx, full_name in enumerate(full_labels): # y_center = bar_values[idx] / 2 # ax.text(len(short_labels)-0.7, y_center, full_name, ha='left', va='center', fontsize=10) plt.tight_layout() plt.show()
方案二:用子图放置规整的说明列表
如果需要更整齐的说明排版,可以单独用一个子图放置缩写与全称的对应列表,主图专注展示柱状图。
import matplotlib.pyplot as plt short_labels = ['A', 'B', 'C', 'D'] full_labels = ['十八字符长度的标签内容1', '十八字符长度的标签内容2', '十八字符长度的标签内容3', '十八字符长度的标签内容4'] bar_values = [12, 25, 18, 22] # 创建布局:左侧子图放说明,右侧主图放柱状图 fig = plt.figure(figsize=(13, 6)) ax_main = fig.add_subplot(1, 2, 2) # 主图占右侧 ax_desc = fig.add_subplot(1, 2, 1) # 说明子图占左侧 # 绘制主柱状图 ax_main.bar(short_labels, bar_values) ax_main.set_xticks(range(len(short_labels))) ax_main.set_xticklabels(short_labels) # 隐藏说明子图的坐标轴,只保留文本 ax_desc.axis('off') # 生成说明文本,每行是「缩写: 全称」的格式 desc_content = '\n'.join([f'{s}: {f}' for s, f in zip(short_labels, full_labels)]) # 将文本居中放置在子图中 ax_desc.text(0.5, 0.5, desc_content, ha='center', va='center', fontsize=12) plt.tight_layout() plt.show()
额外优化提示:如果需要更清晰的对应关系,可以使用ax.annotate()函数添加带箭头的注释,箭头指向对应的柱子,进一步提升可读性。
内容的提问来源于stack exchange,提问作者user135580
相关产品推荐
相关产品推荐

