【问题标题】:Removing year label from matplotlib(MonthLocator)从 matplotlib(MonthLocator) 中删除年份标签
【发布时间】:2022-01-17 09:36:18
【问题描述】:

我有以下代码:

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(2021,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.reset_index()

data['month'] = data.index.month
data['week'] = data.index.week
data['day'] = data.index.day
data = data.reset_index()
del data['Date']
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(0), data['Close'])
locator = mdates.MonthLocator()
formatter = mdates.ConciseDateFormatter(locator)
ax.xaxis.set_major_locator(locator)
ax.xaxis.set_major_formatter(formatter)
plt.show()

此代码生成以下数据帧:

如您所见,data 中没有年份。在这种特殊情况下,我删除了年份,因为我要分析的数据不是金融时间序列数据。因此,我需要从一月开始绘图,而不是打印 1970 年。因此,mdates.MonthLocator() 在绘图的 x 轴上添加 1970。有什么办法可以删除年份标签并让情节从一月开始?

【问题讨论】:

    标签: python pandas matplotlib


    【解决方案1】:

    我认为这是一个错误。我建议将月、周、日转换为单列作为日期时间对象。

    import numpy as np
    import pandas as pd
    
    pd.set_option('display.max_rows', 1000)
    pd.set_option('display.max_columns', 1000)
    pd.set_option('display.width', 1000)
    
    date = np.array([1, 2, 3, 4, 5], dtype='str')
    month = np.array([1, 2, 3, 4, 5], dtype='str')
    year = np.array([2012, 2012, 2012, 2012, 2012, ], dtype='str')
    
    df = pd.DataFrame({'date': date,
                       'month': month,
                       'year': year})
    datetime = []
    i, x, y = df.date, df.month, df.year
    datetime.append(i + '/' + x + '/' + y)
    for i in datetime:
        df = df.assign(FullDate=i)
    
    print(df)
    

    输出:

      date month  year  FullDate
    0    1     1  2012  1/1/2012
    1    2     2  2012  2/2/2012
    2    3     3  2012  3/3/2012
    3    4     4  2012  4/4/2012
    4    5     5  2012  5/5/2012
    
    Process finished with exit code 0
    

    然后,将其用作您的 x 轴。这样,PYPLOT API 将自动检测重复项并显示相似的轴,但没有错误 - 希望是。

    还有ax1.set_xticklabels(labels=['']) 选项,您可以手动配置它以更改x 轴标签并可能删除它们。

    【讨论】:

    • 是否可以从情节中完全删除年份?因为我不确定数据是否有年份
    • 一切都在滴答声中。如果您在 xticklabels 标签内传递一个空字符串,它将摆脱您的 x 轴标签。我应该编辑我的答案并为您提供吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    相关资源
    最近更新 更多