【问题标题】:Interpreting Multiindex datetime解释多索引日期时间
【发布时间】:2022-01-16 03:22:44
【问题描述】:

我有以下代码:

import pandas as pd
from pandas import DataFrame as df
import matplotlib
from pandas_datareader import data as web
import matplotlib.pyplot as plt
import datetime
import warnings
warnings.filterwarnings("ignore")

start = datetime.date(2020,1,1)
end = datetime.date.today()

stock =  'fb'

data = web.DataReader(stock, 'yahoo', start, end)
data.index = pd.to_datetime(data.index, format ='%Y-%m-%d')
data = data[~data.index.duplicated(keep='first')]
data['year'] = data.index.year
data['month'] = data.index.month
data['week'] = data.index.week
data['day'] = data.index.day
data.set_index('year', append=True, inplace =True)
data.set_index('month',append=True,inplace=True)
data.set_index('week',append=True,inplace=True)
data.set_index('day',append=True,inplace=True)

fig, ax = plt.subplots(dpi=300, figsize =(30,4))
data.plot(y='Close', ax=ax, xlabel= 'Date')

plt.show()

如何以更易读的年份和月份格式将多索引日期解释为 x 轴?比如strftime('%y -%m')这样的格式。在这里提出了类似的问题:Renaming months from number to name in pandas 但我无法看到如何使用它来重命名 x 轴。任何帮助将不胜感激。

【问题讨论】:

    标签: python pandas datetime multi-index


    【解决方案1】:

    您可以使用 ma​​tplotlib 中的 日期。有关详细信息,请参阅以下链接:

    https://matplotlib.org/stable/api/dates_api.html#matplotlib.dates.ConciseDateFormatter

    这里是修改后的代码:

    import pandas as pd
    from pandas import DataFrame as df
    import matplotlib
    from pandas_datareader import data as web
    import matplotlib.pyplot as plt
    import datetime
    import warnings
    warnings.filterwarnings("ignore")
    
    from matplotlib import dates as mdates
    
    start = datetime.date(2020,1,1)
    end = datetime.date.today()
    
    stock =  'fb'
    
    data = web.DataReader(stock, 'yahoo', start, end)
    data.index = pd.to_datetime(data.index, format ='%Y-%m-%d')
    data = data[~data.index.duplicated(keep='first')]
    data['year'] = data.index.year
    data['month'] = data.index.month
    data['week'] = data.index.week
    data['day'] = data.index.day
    data.set_index('year', append=True, inplace =True)
    data.set_index('month',append=True,inplace=True)
    data.set_index('week',append=True,inplace=True)
    data.set_index('day',append=True,inplace=True)
    
    fig, ax = plt.subplots(dpi=300, figsize =(15,4))
    plt.plot(data.index.get_level_values('Date'), data['Close'])
    
    #--------------------------------------
    #Feel free to try different options
    #--------------------------------------
    #locator = mdates.AutoDateLocator()
    locator = mdates.MonthLocator()
    
    formatter = mdates.ConciseDateFormatter(locator)
    ax.xaxis.set_major_locator(locator)
    ax.xaxis.set_major_formatter(formatter)
    
    plt.show()
    

    这里是 output.

    【讨论】:

    • 非常感谢@Dawn。它也提高了我的理解! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 2013-10-17
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    • 2017-04-16
    • 1970-01-01
    相关资源
    最近更新 更多