代码之家  ›  专栏  ›  技术社区  ›  dharmatech

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

  •  2
  • dharmatech  · 技术社区  · 2 年前

    下面是一个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()
    

    以下是我得到的结果图表:

    enter image description here

    正如您所看到的,x轴标签太多了。

    问题

    设置图表以使x轴标签清晰易读的好方法是什么?

    1 回复  |  直到 2 年前
        1
  •  1
  •   Trenton McKinney ivirshup    2 年前
    • 这个 'record_date' 值是字符串,而不是日期时间。
      • df.record_date = pd.to_datetime(df.record_date)
    • 通常,折线图应用于连续时间序列数据。

    折线图

    ax = df.plot(x='record_date', y='transaction_today_amt', figsize=(12, 7))
    

    enter image description here

    散点图

    ax = df.plot(kind='scatter', x='record_date', y='transaction_today_amt', marker='.', figsize=(12, 7))
    

    enter image description here

    条形图

    • 使用 直接,因为xticks是日期时间序数,它将用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')
    

    enter image description here

    • 将xticks视为离散的,并绘制所有xticks。
    ax = df.plot(kind='bar', x='record_date', y='transaction_today_amt', figsize=(12, 7))
    

    enter image description here