【问题标题】:Taming the x-axis labels of a multi-level pandas dataframe maptlotlib .plot() call驯服多级熊猫数据框 maptlotlib .plot() 调用的 x 轴标签
【发布时间】:2018-01-17 06:38:17
【问题描述】:

我有带有多级行索引的 pandas 数据框,该索引由两个 datetime 值组成。

我绘制了数据框的各个切片。 (它们是内部层次的切片)。

我的问题是 x 轴标签有太多细节。标签包括索引的两个级别,并使用包含 00:00:00 时间的格式字符串。我只需要使用外层(index[0].values),不关心时间片段。我用红色突出显示了我不想要的部分。

我可以为.plot() 提供不同的索引(看起来像我想要的)的最有效方法是什么?我可以在不弄乱数据框本身的情况下做到这一点吗?

#create the main dataframe
dt = pd.DatetimeIndex(start='2010-1-1', end = '2010-12-31', freq='m')
dt2 = pd.DatetimeIndex(start='2011-1-1', end = '2011-1-10', freq='d')
mi = pd.MultiIndex.from_product([dt,dt2], names=['assessment_date', 'contract_date'])

df = pd.DataFrame(index=mi)
df['foo']=7

df.plot(rot=50)

【问题讨论】:

    标签: python pandas matplotlib


    【解决方案1】:

    由于多索引数据框的刻度标签无论如何都是固定的,您可以循环它们并将其文本截断为您想要的任何内容。

    trunc = lambda x: x.strip("()").split(" ")[0]
    tl = [ trunc(t.get_text()) for t in ax.get_xticklabels()]
    ax.set_xticklabels(tl)
    

    完整示例:

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    
    #create the main dataframe
    dt = pd.DatetimeIndex(start='2010-1-1', end = '2010-12-31', freq='m')
    dt2 = pd.DatetimeIndex(start='2011-1-1', end = '2011-1-10', freq='d')
    mi = pd.MultiIndex.from_product([dt,dt2], names=['assessment_date', 'contract_date'])
    
    df = pd.DataFrame(index=mi)
    df['foo']=np.random.rand(len(df))
    
    ax = df.plot(rot=50)
    
    trunc = lambda x: x.strip("()").split(" ")[0]
    tl = [ trunc(t.get_text()) for t in ax.get_xticklabels()]
    ax.set_xticklabels(tl)
    
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 2019-06-12
      • 2016-04-10
      • 2018-08-12
      • 1970-01-01
      • 2018-12-17
      • 2019-05-31
      • 2014-08-20
      • 2022-01-13
      • 2019-10-01
      相关资源
      最近更新 更多