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

如何解决Python绘制柱状图时X轴标签过于拥挤的问题?

解决Matplotlib柱状图X轴日期标签密集的方案

针对你代码里X轴日期标签挤在一起的问题,这里有几个实用的解决办法:

1. 旋转X轴标签

把标签旋转一定角度并设置右对齐,既能保留全部日期信息,又能避免重叠:

import requests
import pandas as pd
import matplotlib.pyplot as plt

date = '1900-01-01'
transaction_type = 'Withdrawals'
transaction_catg = 'Interest on Treasury Securities'
page_size = 10000

url = 'https://api.fiscaldata.treasury.gov/services/api/fiscal_service/v1/accounting/dts/deposits_withdrawals_operating_cash'
url_params = f'?filter=record_date:gt:{date},transaction_type:eq:{transaction_type},transaction_catg:eq:{transaction_catg}&page[size]={page_size}'

response = requests.get(url + url_params)
result_json = response.json()
df = pd.DataFrame(result_json['data'])

df['transaction_today_amt'] = pd.to_numeric(df['transaction_today_amt']) 

df.plot.bar(x='record_date', y='transaction_today_amt')
# 核心修改:旋转标签并右对齐,同时调整底部间距防止截断
plt.xticks(rotation=45, ha='right')
plt.subplots_adjust(bottom=0.25)

plt.show()

2. 采样显示标签

如果数据量极大,没必要显示每个日期的标签,只保留部分关键日期即可:

# 前面代码与上述一致,到绘图部分:
df.plot.bar(x='record_date', y='transaction_today_amt')

# 每隔100个日期显示一个标签(可根据数据量调整间隔)
ticks = plt.xticks()[0]
labels = df['record_date'].tolist()
plt.xticks(ticks=ticks[::100], labels=labels[::100], rotation=45, ha='right')
plt.subplots_adjust(bottom=0.25)

plt.show()

3. 按时间维度聚合数据

直接减少数据点数量是最根本的解决办法,比如按月份/季度聚合金额,大幅减少X轴标签数量:

import requests
import pandas as pd
import matplotlib.pyplot as plt

date = '1900-01-01'
transaction_type = 'Withdrawals'
transaction_catg = 'Interest on Treasury Securities'
page_size = 10000

url = 'https://api.fiscaldata.treasury.gov/services/api/fiscal_service/v1/accounting/dts/deposits_withdrawals_operating_cash'
url_params = f'?filter=record_date:gt:{date},transaction_type:eq:{transaction_type},transaction_catg:eq:{transaction_catg}&page[size]={page_size}'

response = requests.get(url + url_params)
result_json = response.json()
df = pd.DataFrame(result_json['data'])

df['transaction_today_amt'] = pd.to_numeric(df['transaction_today_amt']) 
# 核心修改:转换日期格式并按月份聚合求和('W'=周,'Q'=季度)
df['record_date'] = pd.to_datetime(df['record_date'])
df.set_index('record_date', inplace=True)
monthly_df = df.resample('M')['transaction_today_amt'].sum()

monthly_df.plot.bar()
plt.xticks(rotation=45, ha='right')
plt.subplots_adjust(bottom=0.25)

plt.show()

4. 使用简化的日期格式

把完整的YYYY-MM-DD格式改成更短的形式,缩短标签长度:

# 前面代码一致,到处理日期部分:
df['record_date'] = pd.to_datetime(df['record_date'])
# 生成简化日期标签(比如只保留年月)
df['short_date'] = df['record_date'].dt.strftime('%Y-%m')

df.plot.bar(x='short_date', y='transaction_today_amt')
plt.xticks(rotation=45, ha='right')
plt.subplots_adjust(bottom=0.25)

plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 23:27:15