提问人:dharmatech 提问时间:10/26/2023 最后编辑:Trenton McKinneydharmatech 更新时间:10/26/2023 访问量:71
如何解决条形图 x 轴过度拥挤的问题
How to resolve issues with a bar plot x-axis being overcrowded
问:
下面是一个执行以下操作的 Python 程序:
- 对 treasury.gov 进行 API 调用以检索数据
- 将数据存储在 Pandas 数据帧中
- 将数据绘制为条形图
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'])
# Convert transaction_today_amt to numeric
df['transaction_today_amt'] = pd.to_numeric(df['transaction_today_amt'])
df.plot.bar(x='record_date', y='transaction_today_amt')
plt.show()
这是我得到的结果图表:
如您所见,x 轴标签太多。
问题
设置图表以使 x 轴标签清晰易读的好方法是什么?
答:
1赞
Trenton McKinney
10/26/2023
#1
- 这些值是字符串,而不是日期时间。
'record_date'
df.record_date = pd.to_datetime(df.record_date)
- 通常,对于连续时间序列数据,应使用折线图。
线图
ax = df.plot(x='record_date', y='transaction_today_amt', figsize=(12, 7))
散布图
ax = df.plot(kind='scatter', x='record_date', y='transaction_today_amt', marker='.', figsize=(12, 7))
酒吧图
- 直接使用 matplotlib,因为 xtick 是日期时间序号,它将用 Year 标记 x 轴。
ax.get_xticks()
→array([12418., 13149., 13879., 14610., 15340., 16071., 16801., 17532., 18262., 18993., 19723.])
fig, ax = plt.subplots(figsize=(8, 5), dpi=200)
ax.bar(x='record_date', height='transaction_today_amt', data=df)
ax.set_yscale('log')
- Pandas 将 Xtick 视为离散的,并绘制了所有 Xtick。
ax = df.plot(kind='bar', x='record_date', y='transaction_today_amt', figsize=(12, 7))
评论
1赞
Trenton McKinney
10/26/2023
@dharmatech 3916 我们在 4538 条记录中是 <=10。它们可以用 过滤掉。df = df[df.transaction_today_amt.gt(10)]
1赞
dharmatech
10/26/2023
好建议。👍 这样可以更快地创建图表。
0赞
dharmatech
10/26/2023
我在这里发布了一个关于分组的相关问题:stackoverflow.com/questions/77363957/......
评论