如何在Python柱状图中对X轴再进行一次划分?
Python实现X轴二级划分图表方案
以下是用matplotlib实现X轴二次划分的具体代码,你可以根据自身数据调整适配:
import matplotlib.pyplot as plt import numpy as np # 模拟数据 sub_labels = ["A1", "A2", "A3", "B1", "B2", "B3", "C1", "C2", "C3"] # X轴子类别标签 values = [3, 5, 4, 6, 8, 7, 2, 4, 3] # 对应数据值 group_sizes = [3, 3, 3] # 每个主类别包含的子类别数量 group_labels = ["类别A", "类别B", "类别C"] # X轴主类别标签 # 绘制基础柱状图 x = np.arange(len(sub_labels)) width = 0.6 fig, ax = plt.subplots(figsize=(10, 6)) bars = ax.bar(x, values, width) # 设置底层子类别X轴 ax.set_xticks(x) ax.set_xticklabels(sub_labels) # 添加顶层主类别划分(二级X轴) group_centers = np.cumsum(group_sizes) - group_sizes/2 # 计算每个主类别的中心位置 ax2 = ax.twiny() # 创建双X轴 ax2.set_xlim(ax.get_xlim()) ax2.set_xticks(group_centers) ax2.set_xticklabels(group_labels) # 隐藏二级轴的刻度线与顶部边框,仅保留标签 ax2.tick_params(axis='x', length=0) ax2.spines['top'].set_visible(False) # 给柱状图添加数值标签 for bar in bars: height = bar.get_height() ax.text(bar.get_x() + bar.get_width()/2., height, f'{height}', ha='center', va='bottom') plt.title("带二级X轴划分的图表") plt.tight_layout() plt.show()
如果你的图表是折线图或其他类型,核心逻辑一致:先设置底层子类别X轴,再通过twiny()创建顶层主类别轴,调整刻度位置对应到每个分组的中心即可。若使用seaborn库,也可借助catplot的分组参数辅助实现,但上述matplotlib方法更直接适配X轴二次划分的需求。
内容的提问来源于stack exchange,提问作者kailak
相关产品推荐
相关产品推荐

