matplotlib 如何解决条形图x轴过度拥挤的问题

brqmpdu1  于 6个月前  发布在  其他
关注(0)|答案(1)|浏览(88)

下面是一个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轴标签清晰可辨?

35g0bw71

35g0bw711#

  • 'record_date'值是字符串,而不是日期时间。
  • df.record_date = pd.to_datetime(df.record_date)
  • 通常情况下,线图应用于连续时间序列数据。

Line Plot

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))


相关问题