Matplotlib柱状图:将X轴从索引转日期轴时轴消失的问题排查
解决Matplotlib非堆叠柱状图日期X轴消失的问题
我来帮你搞定这个X轴消失的麻烦!问题的核心在于你一开始用数值数组height作为柱状图的X轴位置,但当你尝试切换成日期轴时,Matplotlib没法把这些数值和日期对应起来,自然就找不到刻度显示了。咱们一步步修正:
1. 直接用日期作为柱状图的X坐标
别再用height啦,先把容器1对应的日期数据提取出来,还要转换成Matplotlib能识别的数值格式:
# 获取容器1的日期数据 container1_dates = df[df['Container'] == 1]['Date start'] # 把日期转成Matplotlib兼容的数值类型 dates_num = mdates.date2num(container1_dates)
2. 调整柱状图位置实现非堆叠
要画多个系列的非堆叠柱状图,每个系列的X坐标需要偏移,基于转换后的日期数值来加偏移量就行:
bar_width = 0.1 # 铝的柱状图 ax.bar(dates_num, df[df['Container'] == 1]['Aluminum (Al)\nppb'], width=bar_width, label='Aluminum') # 钡的柱状图,X轴偏移一个宽度 ax.bar(dates_num + bar_width, df[df['Container'] == 1]['Barium (Ba)\nppb'], width=bar_width, label='Barium')
3. 正确配置日期轴工具
现在X轴的数值是日期对应的数值了,DayLocator和DateFormatter就能正常工作了:
myFmtx = mdates.DateFormatter("%d/%m") ax.xaxis.set_major_locator(mdates.DayLocator(interval=2)) ax.xaxis.set_major_formatter(myFmtx)
完整修改后的代码
import pandas as pd import numpy as np import matplotlib.pyplot as plt import matplotlib.dates as mdates # 假设df是你的原始数据框 # df = ... # 提取容器1的数据集 container1_data = df[df['Container'] == 1] dates = container1_data['Date start'] dates_num = mdates.date2num(dates) bar_width = 0.1 fig, ax = plt.subplots(1,1, figsize=(15,8)) fig.suptitle('ICP: Time standing', fontsize=25, fontweight='bold') # 绘制非堆叠柱状图 ax.bar(dates_num, container1_data['Aluminum (Al)\nppb'], width=bar_width, label='Aluminum (Al) ppb') ax.bar(dates_num + bar_width, container1_data['Barium (Ba)\nppb'], width=bar_width, label='Barium (Ba) ppb') # 配置日期X轴 myFmtx = mdates.DateFormatter("%d/%m") ax.xaxis.set_major_locator(mdates.DayLocator(interval=2)) ax.xaxis.set_major_formatter(myFmtx) # 优化显示 ax.legend() fig.autofmt_xdate() plt.show()
为啥原来的代码会出问题?
你之前用的height是从0开始的连续数值,和日期没有任何关联。当你设置日期定位器时,Matplotlib会尝试在这些数值里匹配日期刻度,显然找不到对应的值,所以X轴就直接消失了。改用日期转成的数值作为X坐标后,定位器就能正确识别并生成日期刻度啦。
内容的提问来源于stack exchange,提问作者Offir Inbar
相关产品推荐
相关产品推荐

