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

在Julia中实现类似Excel数据透视表的双层X轴刻度标签绘图

同一侧双层X轴标签图表实现方案

需求说明

需要绘制的图表X轴包含两层标签:上层为购买月份,下层为商品名称,所有标签都在X轴同一侧(下方区域),对应数据如下:

MonthItemPrice
FebTomatoe15
FebCockies10
FebJuice20
FebOrange13
MarCake11
MarPotato30
MarJuice13

实现思路(Matplotlib)

放弃twiny()生成另一侧轴的方式,直接在主X轴上方添加月份标签层,通过位置计算和样式控制实现同一侧双层效果,核心步骤:

  • 以商品名称为基础绘制主X轴,对应每个数据点位置
  • 按月份分组,计算每组商品的位置区间,在区间中心放置月份标签
  • 隐藏上层轴的冗余线条,只保留标签,与主X轴标签形成双层结构

完整代码示例

import matplotlib.pyplot as plt
import pandas as pd

# 加载并整理数据
data = pd.DataFrame({
    'Month': ['Feb', 'Feb', 'Feb', 'Feb', 'Mar', 'Mar', 'Mar'],
    'Item': ['Tomatoe', 'Cockies', 'Juice', 'Orange', 'Cake', 'Potato', 'Juice'],
    'Price': [15, 10, 20, 13, 11, 30, 13]
})

# 创建绘图对象
fig, ax = plt.subplots(figsize=(8, 5))

# 绘制柱状图,主X轴为商品名称
x_indices = range(len(data))
ax.bar(x_indices, data['Price'], tick_label=data['Item'])

# 计算每个月份对应的X轴中心位置
month_center_pos = []
for month, group in data.groupby('Month'):
    group_indices = group.index
    center = (group_indices.min() + group_indices.max()) / 2
    month_center_pos.append((center, month))

# 添加上层月份标签轴
top_ax = ax.twiny()
# 设置上层轴刻度和标签,仅保留顶部标签
top_ax.set_xticks([pos for pos, _ in month_center_pos])
top_ax.set_xticklabels([month for _, month in month_center_pos])
top_ax.tick_params(axis='x', bottom=False, top=True, labelbottom=False, labeltop=True)
# 隐藏上层轴的边框线
top_ax.spines['top'].set_visible(False)

# 自动调整布局,避免标签重叠
plt.tight_layout()
plt.show()

方案优势

相比Excel透视表,该代码方案处理大量数据时性能更稳定,且支持自定义标签样式、图表类型,灵活性更高,完全通过代码控制布局细节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 18:52:38